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
原创粉丝点击