C++ —— map 和 multimap

一、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.常见接口说明

构造函数和迭代器没啥好说的,和之前学习过的容器都类似,补充一下,构造函数部分可以使用迭代器区间进行构造

C++ —— map 和 multimap_第1张图片

前面两个都是基本接口,没啥好说的,第三个关于operator[ ]就比较厉害了

内部的实现涉及到Insert,Insert插入的值是一个pair类型,返回的值也是一个pair

插入的值是数据中用来储存的kv模型,是原来管理的数据

返回的pair,first是插入位置的迭代器,second是bool值表示插入是否成功

C++ —— map 和 multimap_第2张图片

C++ —— map 和 multimap_第3张图片

operator[ ]的实现是用Insert的返回值去访问到插入位置的迭代器,并且返回该位置下的value的引用,因此[ ]具备三个功能:

1.插入key和value

C++ —— map 和 multimap_第4张图片

2.查找key并返回value(查找)

3.查找key并修改value

C++ —— map 和 multimap_第5张图片

常见接口

C++ —— map 和 multimap_第6张图片

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的相关使用方法和接口说明

你可能感兴趣的:(c++,开发语言)