map映照容器所处理的元素数据,与数据库的具有键值的记录非常相似,由一个键值和其他若干数据(映照数据)组成,键值和映照数据之间,可建立一个数学上的映照关系,由此而得映照容器的名称。**容器的数据结构同样是采用红黑树进行管理,插入的键值不允许重复,**所使用的节点元素的比较函数只对元素的键值进行比较,元素的各项数据可通过键值检索出来。
- map技术原理
下图所示是map容器的一个元素的数据组成,可通过pair封装成一个结构对象。map容器做的,就是将这个pair对象插入到红黑树,完成一个元素的添加。同时,也要提供一个仅使用键值进行比较的函数对象,将它传递给红黑树。由此,可利用红黑树的操作,将map元素数据插入到二叉树中的正确位置,也可以根据键值进行元素的删除和检索。
- map应用基础
2.1创建map对象
利用默认的less函数对象和内存分配器,创建一个没有任何元素的map对象。例如下面一行代码创建了一个空的map对象m,m的键值类型为char,元素的映照数据类型为int,键值的比较函数对象为greater。ps:greater是按照键值将映照数据从大到小排列,没写就默认从小到大,即比较函数对象为less。
map> m;
还有几种方式,后面有遇到再提
2.2元素的插入和删除
除了可以用insert函数将整个元素数据进行插入外,常用map容器的数组 “[]” ,显示地为不同键值赋予内容(映照数据)
不多说直接上代码:
#include
运行结果:
2.2元素的遍历访问和反向遍历
除了利用键值的数组方式来访问元素外,经常使用map容器的迭代器进行访问或反向遍历。
#include
运行结果:
2.3元素的搜索
利用map提供的find函数,可搜索出具有某一键值的元素。
#include
运行结果:
2.4补充
multimap多重映照容器,和map一样都是使用红黑树对元素进行插入等操作,但是multimap允许具有重复键值的元素插入容器。正是由于元素键值的重复插入,使得数组操作符“[]”利用键值来访问失去意义,因此multimap没有定义数组方式的"[]"操作运算。