map
映射
map 可以将任何基本类型(包括STL容器) 映射到任何基本类型(包括STL容器)
定义
map<typename1, typename2> mp;
map和其它STL容器定义上有点不一样,map需要确定映射前类型(键key)和映射后类型(值value)
如果是字符串到整型的映射,必须使用string而不能用char数组 char数组作为数组,是不能被作为键值的
map<string, int> mp;
map的键和值也可以是STL容器,如map<set, string> mp;
map容器内元素的访问
- 通过下标访问
和访问普通的数组一样,如map<char, int> mp的map来说,可以直接使用mp[‘c’]的方式来访问它对应的整数
需要注意 map中的键是唯一的 后来的会覆盖前面的赋值 - 通过迭代器访问
map<typename1, typename2>::iterator it;
map可以使用 it->first来访问键 it->second来访问值
map内部是使用红黑树实现的(set也是),在建立映射的过程中会自动实现从小到大的排序功能
###map常用函数解析
- find() find(key)返回键为key的映射的迭代器
//eg.
//...
//a 1, b 2, c 3
map<char, int>::iterator it = mp.find('b');
printf("%c %d\n", it->first, it->second); //b 2
- erase()
2.1 删除单个元素
mp.erase(it), it为需要删除的迭代器
mp.erase(key),key为欲删除的映射的键
2.2 删除一个区间内的所有元素 //mp.erase(first, last) 删除左闭右开[first, last) - size()获得map中映射的对数
- clear() 用来清空map中的所有元素
map 常见用途
- 需要建立字符(或字符串)与整数之间映射的题目,使用map可以减少代码量
- 判断大整数或者其他类型数据是否存在的题目,可以把map当bool数组用
- 字符串和字符串的映射可能遇到
如果一个键需要对应多个值,就只能用multimap
unordered_map 以散列代替map内部的红黑树实现,处理无排序功能