STL map
来源:互联网 发布:通于心术知类在穷 编辑:程序博客网 时间:2024/06/15 10:01
STL map 使用详解
#include<iostream>#include<map>#include<vector>#include<string>#include<cstring>#include<iterator>#include<algorithm>#include<functional>using namespace std;//map 底层为红黑树 可以自平衡 即自动排序//只提供前向迭代器 并且不允许修改键值 也不允许键值重复//以下 列举常用 的函数/*map 构造函数map(InputIterator first,InputIterator last);//用区间元素 构造mapmap(const map<key,T,compare,Alloc>& map1);//拷贝构造*//*map成员函数size_typr size();void swap(const map<key,T,compare,Alloc>& map1);T& operator[](const key_type& x);//这个函数很重要 返回pair类型pair<iterator,bool> insert(const value_type& x);void insert(iterator first,iterator last)void erase(iterator pos);void erase(iterator first,iterator last)iterator find(const key_type& x);//重要函数 返回的是该元素插入区间(可能两个迭代器指向同一位置)//即lower_bound 与upper_bound 的返回值pair<iterator,iterator> equal_range(const key_type&x)const;*/template<class T1, class T2>struct Print{void operator()(const pair<T1,T2>& Pair){cout << Pair.first << " " << Pair.second << endl;}};class Own{public:int beauty;int money;Own(int b, int m){beauty = b;money = m;}//内置类型 的比较函数 在STL中已经存在//自定义类型 一定要重载< 或者 > 运算符 否则 无法使用map //1 重载运算符为全局函数(可有元 可非有元)//2 重载运算符为成员函数(一定需要后const修饰)//3 利用函数对象// friend bool operator<(const Own& o1, const Own& o2);/*有元形式bool operator<(const Own& o)const{return this->beauty+this->money<o.beauty + o.money;}*/};/*全局形式bool operator<(const Own& o1, const Own& o2){return o1.beauty + o1.money < o2.beauty + o2.money;}*///函数对象struct Compare{//最好使用后const修饰bool operator()(const Own& o1, const Own& o2)const{return o1.beauty + o1.money < o2.beauty + o2.money;}};const int len = 6;int main(void){//vector<int> ivec(istream_iterator<int>(cin),istream_iterator<int>());map<int, string> Map1;int array[len] = {5,9,2,4,6,9};vector<string> Vec;Vec.push_back("zhang");Vec.push_back("li");Vec.push_back("lu");Vec.push_back("zhao");Vec.push_back("zhou");Vec.push_back("cheng");pair<int, string> PairArra[6];for (int i = 0; i < len; ++i){PairArra[i].first = array[i];PairArra[i].second = Vec[i];}Map1 = map<int, string>(PairArra, PairArra +len);typedef map<int, string>::iterator M_ITE;pair<M_ITE, bool> bInsert;bInsert=Map1.insert(pair<int,string>(1,"mi"));if (bInsert.second){cout << "insert succes: " << bInsert.second << endl;}//for_each(Map1.begin(), Map1.end(), Print<int, string>());pair<M_ITE, M_ITE> Range;Range = Map1.equal_range(3);for_each(Map1.begin(), Map1.end(), Print<int, string>());if(Map1.end()!=Range.first)cout <<"first "<< Range.first->first << "second "<<Range.second->first << endl;M_ITE ite = Map1.find(9);//使用自带的find函数 比STL算法find快 if (Map1.end() != ite){cout << ite->first << endl;}map<Own, string, Compare> Map2;Map2.insert(pair<Own,string>(Own(100,100),"mrzhang"));//当map的key为自定义类型 时 一定要重载< 运算符 //建议写成有元 或者全局形式return 0;}
0 0
- STL-map
- stl -map
- stl map
- STL Map
- STL---map
- STL(MAP)
- STL(map)
- STL--map
- STL map
- stl map
- STL map
- STL----map
- stl map
- STL map
- 【STL】map
- STL--map
- STL map
- STL map
- 设计模式C++学习笔记之三(Singleton单例模式)
- kettle中设置日志表
- poj--1789 Truck History(最小生成树Prim算法)
- Hibernate中get方法和load方法的区别
- 在写一个iOS应用之前必须做的7件事(附相关资源)
- STL map
- SQL Server 获取数据库表的元信息
- 北化oj 2374- A+B结果的个位数
- DrawerLayout + Toolbar
- 二叉树重建
- 设计模式之工厂方法模式及代码示例
- 设计模式C++学习笔记之四(Multition多例模式)
- 类的构造函数
- C语言小编程之判断一个数是否是2的n次方的巧妙方法