map可以翻译为映射,可以将任何基本类型映射到任何基本类型。
使用前提条件:
需要添加map头文件#include
总结:map的常见用途
(1)需要建立字符或者字符串与整数之间映射的题目
(2)判断大整数或者其他类型的数据是否存在的题目,可以把map当bool数组使用
(3)字符串和字符串的映射
延伸:map的键和值是唯一的,而如果一个键需要对应多个值,只能使用multimap.
1.map的定义
map需要映射前的类型(键key)和映射后的类型(值value)
所以括号里填写两个类型,第一个是key,第二个是value
mapmp;
如果是int型映射到int型,那就是普通的int型数组
如果是字符串到整型的映射,必须使用string而不能使用char
字符的话,可以是char
map mp;
map的key和value也可以是STL容器,可以将一个set容器映射到一个字符串;
map,string> mp;
2.map容器内元素的访问
(1)通过下标访问
#include
#include
#include
#include
(2)通过迭代器访问
map::iterator it;
typename1和typename2就是定义map时填写的类型,这样就得到了迭代器it
因为map的每一对映射都有两个typename,这决定必须能只用一个it 来同时访问键和值。事实上,map可以使用it->first来访问键,用it->second来访问值。
#include
#include
有趣的现象就是: map会以键从小到大的顺序自动排序,这是由于map内部是使用红黑树实现的(set也是).
3.map常用函数实例解析
(1)find()
find(key)返回键为key的映射的迭代器
#include
#include
#include
#include
(2)erase()有两种用法
①删除单个元素 mp.erase(it),it为要删除的元素的迭代器
#include
#include
#include
#include
注意:这里的for 循环的初始条件一定要从map::iterator it=mp.begin()开始,不能像输出所有元素那样直接用 ; 代替,之所以人家能用是因为人家一开始的条件就是map::iterator it=mp.begin(),但是此时我们的出事条件是找出要删除的那个元素map::iterator it=mp.find('a');
①(2)还可以用mp.erase(key),key为要删除的映射的键。
#include
#include
#include
#include
②删除一个区间内的所有元素 mp.erase(first,last),注意还是左闭右开噢!
#include
#include
#include
这是为什么呢?不是应该还剩下c,按理说应该输出 c 20 吗?
注意噢:删除的时候也是排好序才开始删的噢!就是 a c r 排好之后才定位a的噢!
再看,把删除起始元素换一下。。。。换成c
(3)size() 用来获取map中映射的对数
#include
#include
(4)clear()清空map中的所有元素
#include
#include