本文主要简单介绍映射(map)的原理和用法,便于学习和查阅。
映射的原理
map 映照容器的元素数据是由一个键值和一个映照数据组成的,键值与映照数据之间具有一一映照的关系。
map 映照容器的数据结构也是采用红黑树来实现的,插入元素的键值不允许重复,比较函数只对元素的键值进行比较,元素的各项数据可通过键值检索出来。由于map 与set采用的都是红黑树的数据结构,所以,用法基本相似。图是map 映照容器元素的数据构成示意图。
映射使用
- 头文件
#include<map>
- 定义
创建map对象时,键值与映照数据的类型由自己定义。
map<Data_Type1, Data_Type2> name;
例如:
map<string, float> m;
- 插入
插入元素在没有指定比较函数时,元素插入的位置按键值从小到大排入红黑树中。
m[Data_Type1] = Data_Type2;
例如:
m["Jack"] = 98.5;
m["Bomi"] = 96.0;
m["Kate"] = 97.5;
- 遍历
map<string, float>::iterator it; // 定义迭代器
for (it = m.begin(); it != m.end(); it++)
cout << (*it).first << " " << (*it).second << endl;
定义一个迭代器,并用begin()
和 end()
分别表示起始位置和终止位置,用first
和 second
分别表示键值和映射的值。
- 元素删除
用erase()
方法删除元素, 可以删除某个迭代器位置上的元素,等于某个键值的元素,一个迭代器区间上所有的元素,当然也可以用clear()
方法来清空。
例如:
m.erase(96.0);
- 元素的反向搜索
使用反向迭代器reverse_iterator
反向遍历容器中的数据,它需要用rbegin()
和 rend()
分别表示反向遍历的起始位置和终止位置。
map<string, float>::reverse_iterator rit;
for (rit = m.rbegin(); rit != rend(); it++)
- 搜索
使用find()
方法来搜索键值。如果搜索到了,则返回该键值所在的迭代器的位置;否则返回 end()
迭代器位置。
it = m.find("Kate");