Fork me on GitHub

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

 

 

 

 

 

===========================================================================================================================

posted @ 2020-06-14 21:00  索智源  阅读(398)  评论(0编辑  收藏  举报