一、map
1.介绍
1. map是关联容器,它按照特定的次序(按照key来比较)存储由键值key和值value组合而成的元 素。
2. 在map中,键值key通常用于排序和惟一地标识元素,而值value中存储与此键值key关联的内容。键值key和值value的类型可能不同,并且在map的内部,key与value通过成员类型value_type绑定在一起,为其取别名称为pair: typedef pair value_type;
3. 在内部,map中的元素总是按照键值key进行比较排序的。
4. map中通过键值访问单个元素的速度通常比unordered_map容器慢,但map允许根据顺序 对元素进行直接迭代(即对map中的元素进行迭代时,可以得到一个有序的序列)。
5. map支持下标访问符,即在[]中放入key,就可以找到与key对应的value。
6. map通常被实现为二叉搜索树(更准确的说:平衡二叉搜索树(红黑树))。
2.键值对_pair
键值对kv模型实际上就是用pair去实现操作的
pair 实际上可以看作一个内部有两个元素的类模板,当需要使用两个绑定在一起的关系时,可以使用pair,在map的实现中就用到了pair作为成员变量、函数返回值等等
struct pair
{
typeName1 first;
typeName2 second;
};
pair的两个参数类型是在使用时自己确定穿参的,可以是任意类型,自定义类型或者容器都可以
3.常见接口说明
构造函数和迭代器没啥好说的,和之前学习过的容器都类似,补充一下,构造函数部分可以使用迭代器区间进行构造
前面两个都是基本接口,没啥好说的,第三个关于operator[ ]就比较厉害了
内部的实现涉及到Insert,Insert插入的值是一个pair类型,返回的值也是一个pair
插入的值是数据中用来储存的kv模型,是原来管理的数据
返回的pair,first是插入位置的迭代器,second是bool值表示插入是否成功
operator[ ]的实现是用Insert的返回值去访问到插入位置的迭代器,并且返回该位置下的value的引用,因此[ ]具备三个功能:
1.插入key和value
2.查找key并返回value(查找)
3.查找key并修改value
常见接口
4.总结
1. map中的的元素是键值对
2. map中的key是唯一的,并且不能修改
3. 默认按照小于的方式对key进行比较
4. map中的元素如果用迭代器去遍历,可以得到一个有序的序列
5. map的底层为平衡搜索树(红黑树),查找效率比较高O(logN)
6. 支持[ ]操作符,operator[ ]中实际进行插入查找。
二、multimap
multimap中的接口可以参考map,功能都是类似的。
注意:
1. multimap中的key是可以重复的。
2. multimap中的元素默认将key按照小于来比较
3. multimap中没有重载operator[]操作。
4. 使用时与map包含的头文件相同
总结
本章整理了关于map和multimap的相关使用方法和接口说明