map 映射
一、意义
1. 映射的概念
映射(mapping)
键(key
)与值(value
)的对应关系。
map
容器
一个STL
中常用的容器,可以将任何有序的类型(基本类型、string
)映射到任何类型(基本类型、string
、结构体、STL
容器)。
2. map 的特点
- 动态存储空间
- 插入、删除、查找效率高
- 键与值类型定义灵活
- 适用于判断范围较大的整数(例如在桶排序中)或者其他类型的数据(例如
string
)是否存在,以及需要建立的字符(串)与其他数据类型之间的映射
二、map 相关程序
1. 定义
定义格式:map <键类型, 值类型> 容器名;
例如:
#include <map>
map <string, string> m;
2. 初始化
初始化格式:map <键类型, 值类型> 容器名{
{键1, 值1}, {键2, 值2}, ...};
#include <map>
map <string, string> m{
{
"a", "A"}, {
"b", "B"}}; // 一定注意!没有等号!!
3. 赋值 & 访问
m["a"] = "A";
m["a"] = "B"; // 值会被覆盖
cout << m["a"]; // 输出: B
cout << m["b"]; // 输出空字符串
4. 拷贝
#include <map>
map <string, string> m2(m);
5. 所有操作
方法 | 功能 |
---|---|
mp[key] = value; |
修改 key 对应的 value ,如果不存在则创建 |
mp.insert({key1, value1}, {key2, value2}); |
插入纯新的键值对(不能更新){key1, value1} 和 {key2, value2} |
mp.emplace(key, value) |
插入纯新的键值对(不能更新){key, value} |
mp.erase(key); |
根据键删除键值对 |
mp.clear(); |
删除所有元素 |
mp.begin() |
返回指向 map 头部的迭代器 |
mp.end() |
返回指向 map 尾部的下一个位置的迭代器 |
mp.size() |
返回 map 中键值对的个数 |
mp.empty() |
判断是否为空 |
mp.find(key) |
获得指向键 key 的迭代器,如果未找到返回 mp.end() |
mp.count(key) |
查看指定键 key 是否出现,出现为 1 1 1,否则为 0 0 0 |
三、迭代器
1. 定义
#include <map>
map <string, string> m{
{
"a", "A"}};
auto it = m.begin();
2. 遍历
for (auto it = m