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); //拷贝构造函数。
===========================================================================================================================