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;

 

posted @ 2024-01-25 14:48  Jianxian  阅读(56)  评论(0)    收藏  举报