STL——容器(Map & multimap)的简述与构造
1. map/multimap 的简介
map 是标准的关联式容器,一个 map 里存储的元素是一个键值对序列,叫做 (key,value) 键值对。它提供基于 key 快速检索数据的能力。
map 中 key 值是唯一的。集合中的元素按一定的顺序排列。元素插入过程是按排序规则插入,所以不能指定插入位置。
map 底层的具体实现是采用红黑树变体的平衡二叉树的数据结构。在插入操作、删除和检索操作上比 vector 快很多。
map 可以直接存取 key 所对应的 value,支持[]操作符,如 map[key]=value。
multimap 与 map的区别:map支持唯一键值,每个键只能出现一次;而 multimap 中相同键可以出现多次。multimap 不支持 [ ] 操作符。
一段简单的示例:
1 #include <iostream> 2 #include <map> 3 4 using namespace std; 5 6 int main() 7 { 8 map<int, string> mapStu; 9 multimap<int, string> multimapStu; 10 11 mapStu.insert(pair<int, string>(1, "mapStu 内容A")); 12 mapStu.insert(pair<int, string>(2, "mapStu 内容B")); 13 mapStu[3] = "mapStu 内容C"; //map 可以通过下标符进行赋值,multimap 不可以这样进行赋值 14 15 multimapStu.insert(pair<int, string>(1, "multimapStu 内容A")); //multimap 支持同 key 插入 16 multimapStu.insert(pair<int, string>(1, "multimapStu 内容B")); 17 //multimapStu[3] = "multimapStu 内容C"; //这样写是会报错的 18 19 for (map<int, string>::iterator it = mapStu.begin(); it != mapStu.end(); it++) 20 { 21 cout << "key: " << (*it).first << " value: " << (*it).second << endl; 22 } 23 cout << endl << "multimap 支持同 key 插入" << endl; 24 for (map<int, string>::iterator it = multimapStu.begin(); it != multimapStu.end(); it++) 25 { 26 cout << "key: " << (*it).first << " value: " << (*it).second << endl; 27 } 28 29 return 0; 30 }
打印结果:
这里还要注意一点,在 map 中,通过 insert 进行已有 kay 的写入,不会对已有 key 的 value 进行覆盖,但使用 [ ] 操作符写入已有 key 会覆盖对应的 value。
2. map/multimap 对象的默认构造
map/multimap 采用模板类实现,对象的默认构造形式:
map<T1,T2> mapTT;
multimap<T1,T2> multimapTT;
如:
map<int, char> mapA;
map<string,float> mapB;
其中T1,T2还可以用各种指针类型或自定义类型
3. map和multimap 对象的带参数构造
方式一:map(beg,end); //将[beg, end)区间中的元素拷贝给本身。
方式二:map(const map &mapObject); //拷贝构造函数。
===========================================================================================================================