C转C++速成浅入浅出系列——STL之map
本系列为应付考研复试用,知识浅入浅出,很多地方不深究细节原理;如有谬误,欢迎大家指出。
map
【map:地图、图谱】
理解为地图(我感觉跟python的字典【dictionary】一样)。一个map中包含了多个键值对,一个键值对可以理解为一个特殊的结构体。
键值对:即包含关键字(即key)和值(即value或data)的一个“对”。故称为键值对。
map会按键值的ASCII码进行排序存放。
需提供头文件#include <map>。
创建
不用指定长度。尖括号内第一个是key的数据类型,第二个是value的数据类型。
1 map <string,int> m1; 2 map <string,string> m2;
添加
类似于python的字典,如果只用C说的话,应该从数组上进行扩展理解。
1 m1["我家门高"] = 7; 2 m2["我家门材质"] = "铝合金";
访问
可以由键值对的键值获取此键值对应的值。因此,键和值之间可以具有一对一、多对一的关系。(没有一对多)
如果存在该键,则返回该键对应的值;如果不存在该键,则返回0。
1 cout << m1["我家门高"];
遍历
使用迭代器进行遍历。同时因为迭代器的p会遍历一个map中的所有元素指针(每个元素都是一个键值对【可以理解为结构体】,包含key和value两个值;key是键值对结构体的first变量,value是键值对结构体的second变量),因此可以利用迭代器获取该map中所有的键和值。
for(auto p=m.begin();p!=end();p++){ //p为指针,故用箭头;键可用first获取,值可用second获取 cout << "键" << p->first << "对应的值为" << p->second; }
获取长度
使用.size()方法获取map的长度。
cout << m1.size();
非排序版map
可以使用unordered_map来定义,同时需要使用#include <unordered_map>。当需求上无需排序,或者在刷题时想要提升算法运行速度,可以使用这个。
其可使用的方法和map基本完全相同。
其存放顺序随机。(好像是借由Hash表实现的)
1 unordered_map <string,string> m;

浙公网安备 33010602011771号