Map是STL 的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道。
简介:
map中所有元素都是pair
pair中第一个元素为key(键值),起到索引作用,第二个元素为value(实值)
所有元素都会根据元素的键值自动排序
本质:
map/multimap属于关联式容器,底层结构是用二叉树实现。
优点:
可以根据key值快速找到value值
map和multimap区别:
map不允许容器中有重复key值元素.
multimap允许容器中有重复key值元素
1. 构造和赋值
//创建map容器 mapm1; m1.insert(pair (1,10)); m1.insert(pair (2,20)); m1.insert(pair (3,30)); m1.insert(pair (4,40)); PrintMap(m1); map m2(m1); //拷贝构造 PrintMap(m2); map m3; //赋值 m3=m2; PrintMap(m3);
2. 大小和交换
//大小 mapm1; m1.insert(pair (1,10)); m1.insert(pair (2,20)); m1.insert(pair (3,30)); m1.insert(pair (4,40)); if(m1.empty()) { cout<<"m1为空!"< cout<<"m1不为空!"< m1; m1.insert(pair (1,10)); m1.insert(pair (2,20)); m1.insert(pair (3,30)); m1.insert(pair (4,40)); map m2; m2.insert(pair (5,100)); m2.insert(pair (6,200)); m2.insert(pair (8,300)); m2.insert(pair (7,400)); cout<<"交换前:"< 3. 查找和统计
mapm; m.insert(pair (1,10)); m.insert(pair (2,20)); m.insert(pair (3,30)); map ::iterator pos=m.find(3); if(pos!=m.end()) { cout<<"查到元素 key = "<< (*pos).first<<" value = "<< (*pos).second< cout<<"未找到元素!"< 4. 插入和删除
mapm; //插入 //第一种 m.insert(pair (1,10)); //第二种 m.insert(make_pair(2,20)); //第三种 m.insert(map ::value_type(3,30)); //第四种 m[4]=40; cout< 5. 排序
class MyCompare { public: bool operator()(int v1,int v2) { return v1>v2; } }; void test01() { mapm; m.insert(make_pair(1,10)); m.insert(make_pair(6,60)); m.insert(make_pair(7,70)); m.insert(make_pair(4,40)); m.insert(make_pair(9,90)); for(map ::iterator it=m.begin();it!=m.end();it++) { cout<<" key = "<<(*it).first<<" value = "< second<



