map是标准的关联式容器,一个map是一个键值对序列,即(key,value)对。它提供基于key的快速检索能力。
map中key值是唯一的。集合中的元素按一定的顺序排列。元素的插入过程是按照排序规则插入,所以不能指定插入位置。
map的具体实现采用红黑树的变体平衡二叉树的数据结构。在插入删除操作上快于vector。
map可以直接存取key对应的value,支持[]操作符,如map[key] = value;
multimap与map的区别:map支持唯一键值,每个键值只能出现一次,而multimap中相同键可以出现多次multimap不支持[]操作符.
map中插入元素有三种方式:
1 map<int,string> mapA; 2 mapA.insert(pair<int,string>(3,"小王")); 3 mapA.insert(map<int,string>::value_type(1,"小李")); 4 mapA[2] = "小刘";
.insert()方法返回值是pair<iterator,bool>
pair<map<int,string>::iterator,bool> pairResult = mapA.insert(pair<int,string>(4,"小猪"));
map<int,string,less<int>> mapA;//这样就是关键字升序
1 map<int,string,greater<int>> mapA; 2 mapA.insert(pair<int,string>(3,"小王")); 3 mapA.insert(map<int,string,greater<int>>::value_type(1,"小李")); 4 mapA[2] = "小刘";mapA.insert(make_pair(6,"小彭")); 5 pair<map<int,string,greater<int>>::iterator,bool> pairResult = 6 mapA.insert(pair<int,string>(4,"小猪")); 7 for (map<int,string,greater<int>>::iterator it = mapA.begin();it != mapA.end();it++) 8 { 9 cout<<it->second<<" "; 10 } 11 cout<<endl;
以上是升序
虽然说查找似乎有两种方法但是我只是成功了一种另一种总是有bug所以我还是只贴出来一个算了:
1 //声明和定义 2 struct userdevice 3 { 4 string m_devicename; 5 long m_deviceid; 6 int m_devicePopedom; 7 }; 8 9 typedef multimap<string,userdevice> USERTABLE; 10 typedef USERTABLE::const_iterator CIT; 11 typedef pair<CIT,CIT> Rang; 12 13 //主函数 14 CIT itmset; 15 16 userdevice d1,d2,d3,d4; 17 d1.m_deviceid = 12341234; 18 d1.m_devicename = "d1"; 19 d1.m_devicePopedom = 123; 20 21 d2.m_deviceid = 23622344; 22 d2.m_devicename = "d2"; 23 d2.m_devicePopedom = 234; 24 25 d3.m_deviceid = 34513234; 26 d3.m_devicename = "d3"; 27 d3.m_devicePopedom = 345; 28 29 d4.m_deviceid = 43622344; 30 d4.m_devicename = "d4"; 31 d4.m_devicePopedom = 456; 32 33 USERTABLE m_user; 34 m_user.insert(make_pair("liuzhimin",d1)); 35 m_user.insert(multimap<string,userdevice>::value_type("peng",d2)); 36 m_user.insert(make_pair("liuzhimin2",d3)); 37 m_user.insert(make_pair("liuzhimin2",d4)); 38 39 40 Rang range = m_user.equal_range("peng"); 41 for (CIT i = range.first;i != range.second;i++) 42 { 43 cout<<i->second.m_deviceid<<',' 44 <<i->second.m_devicename.c_str()<<',' 45 <<i->second.m_devicePopedom<<endl; 46 }