目录
1. 关联容器和map容器概述
2. map容器
2.1 map的创建以及初始化列表
2.2 map容器的一般常用属性(方法)
2.3 插入数据
2.4 数据的访问和遍历
2.5 数据的删除
2.6 map中关键词的排序
3. multimap容器
3.1 访问元素
3.2 删除元素
map容器是关联容器的一种。在关联容器中,对象的位置取决于和它关联的键的值。键可以是基本类型也可以是类类型。关联容器是与非关联容器(顺序容器)相对应的,顺序容器中元素的位置不依赖于元素的值,而是和该元素加入容器时的位置有关。关联容器的类型有下面八种:
按关键字有序保存元素
map 关联数组;保存关键字-值对
set 关键字即值,只保存关键字的容器
multimap 关键字可以重复出现的map
multiset 关键字可以重复出现的set
无序关联容器
unordered_map 用哈希函数组织的map,无序
unordered_set 用哈希函数组织的set,无序
unordered_multimap 哈希组织的map;关键字可以重复
unordered_multiset 哈希组织的set,关键字可以重复
map容器有四种,每一种都是由类模板定义的。所有类型的map容器保存的都是键值对的元素。map容器的元素是pair
1、map容器:map的底层是由红黑树实现的,红黑树的每一个节点都代表着map的一个元素。该数据结构具有自动排序的功能,因此map内部的元素都是有序的,元素在容器中的顺序是通过比较键值确定的。默认使用 less 对象比较。
2、multimap容器:与map容器类似,区别只在于multimap容器可以保存键值相同的元素。
3、unordered_map容器:该容器的底层是由哈希(又名散列)函数组织实现的。元素的顺序并不是由键值决定的,而是由键值的哈希值确定的,哈希值是由哈希函数生成的一个整数。利用哈希函数,将关键字的哈希值都放在一个桶(bucket)里面,具有相同哈希值的放到同一个桶。unordered_map内部元素的存储是无序的,也不允许有重复键值的元素,相当于java中的HashMap。
4、unordered_multimap容器:也可以通过键值生成的哈希值来确定对象的位置,但是它允许有重复的元素。
map和multimap容器的模板都定义在map头文件中,unordered_map和unordered_multimap容器的模板都定义在unordered_map头文件中中。
下图展示了一个用名称作为键值 map
前面讲过map容器的底层是由红黑树(一种非严格意义上的平衡二叉树)实现的,元素检索的时间复杂度是O(logN),相比于顺序检索的线性时间复杂度还是很快的。
map类模板有四个类型参数,但是一般只需要指定前两个模板参数的值。第一个是键值的类型,第二个是所保存对象的类型。我们通常所用的一种构造一个map对象的方法是:
Map mapStudent;
当初始化一个map时,必须提供关键字类型和值类型。我们将每个关键字-值对包围在花括号中: {key,value} 来指出它们一起构成了map中的一个元素。初始化列表有两种方式:
map authors = { {"Joyce", "James"},
{"Austen", "Jane"},
{"Dickens", "Charles"} };
或者: