map是C++中的一种键值对容器,要点就是数据在map中是成对出现的,可以经过键也就是key来快速找到对应的值。编程
本身编程时须要在代码前加上下面的头文件来使用map函数
#include<map>
map<int, string> my_map; //声明一个map //map的键值对类型能够是基础数据类型, //也能够是结构体或类
和vector同样,map也存在迭代器,方便对map进行遍历操做code
map<int, string>::iterator iter = my_map.begin();
map中也存在begin,end,rbegin,rend,前二者为顺序的头尾迭代器,后二者为逆序的头尾迭代器。排序
map中经常使用的插入数据方式有两种,一种是经过下标插入,一种是经过insert函数插入string
my_map[key] = value; pair<map<int, string>::iterator, bool> Insert_Pair = my_map.insert(pair<int, string>(1, "one"));
insert函数中的参数除了能够是pair数据之外,还能够是it
map<int, string>::value_type(1, "one")
这样子的格式,可是我的仍是比较喜欢直接经过下标插入
这里要注意比较关键的一点是上述两种方式插入的结果多是不一样的。当key在map中已经存在时,经过下标插入会直接覆盖以前的值,而insert则不会插入。
从代码中咱们也能够看出insert函数的返回值是一个pair,pair的第一个值是要插入的map的和插入值的key相同的那个迭代器,而第二个值就是插入结果,true则成功插入,false则没有。容器
还有一点特别要注意的是不要用下标来查找map中是否存在某键值对,这会致使map中插入新的值或者以前的值被覆盖。基础
对于map来讲判断key是否存在是一个很是重要的操做遍历
int num = my_map.count(key); //返回值是0或1,表示map中某 //个key出现的次数 map<int, string>::iterator iter = my_map.find(key); //返回值是一个迭代器 //若是找到了就是对应的键值对 //若是没找到就是my_map.end()对应的迭代器
map中删除数据主要有三种方式,经过迭代器删除某个键值对,经过迭代器删除某些键值对和经过key删除键值对map
my_map.erase(iter); my_map.erase(begin_iter, end_iter); my_map.erase(key);
这里有一点须要注意就是map中会自动按key升序排序,因此若是使用结构体做为map的key或者value,在插入的时候可能会遇到问题,这时候就须要重载小于操做符<。这一点我不多用,若是下次碰到的话再补充好了。
my_map.size(); //返回map中的键值对个数 my_map.clear(); //清除map中全部键值对 my_map.empty(); //返回map是否为空,返回值为bool