C++(28):容器类 <map>
目录
一、核心概念
二、基本语法
1. 声明与初始化
2. 插入元素
3. 访问元素
4. 遍历
5. 删除元素
三、特点
1. 自动排序
2. 键的唯一性
3. 高效查找
4. 自定义排序规则
5. 内存与性能
四、实例代码
五、对比其他容器
六、功能函数
编辑
一、核心概念
<map>
是一种 关联容器(Associative Container),其核心特性如下:
-
键值对存储
每个元素是一个pair<const Key, Value>
,由 唯一键(Key) 和 值(Value) 组成。 -
自动排序
元素按键(Key)的升序自动排序(默认规则,可自定义):在<map>
中,默认的排序规则是按照键值(Key)进行升序排序。每一个键值在插入到map
中时,map
会根据当前的键值与已有的键值进行比较,依据升序原则将该键值插入到合适的位置,从而保证整个容器中的键值始终处于有序状态。 -
底层实现
基于红黑树(Red-Black Tree)实现,保证插入、删除、查找的时间复杂度为 O(log n)。
二、基本语法
1. 声明与初始化
需要包含头文件,#include <map>。
#include <map>
using namespace std;// 声明一个键为string、值为int的map
map<string, int> scores;// 初始化列表(C++11+)
map<string, int> students = {{"Alice", 90},{"Bob", 85},{"Charlie", 95}
};
2. 插入元素
// 使用insert插入pair
students.insert(make_pair("David", 88));// 使用operator[]插入或修改
students["Eve"] = 92; // 键不存在时插入,存在时修改值
3. 访问元素
// 通过键访问(若键不存在会插入默认值)
cout << students["Alice"]; // 输出90// 安全访问:使用find避免自动插入
auto it = students.find("Frank");
if (it != students.end()) {cout << it->second; // it->first是键,it->second是值
}
4. 遍历
// 迭代器遍历
for (auto it = students.begin(); it != students.end(); ++it) {cout << it->first << ": " << it->second << endl;
}// 范围for循环(C++11