C++中的map是基于红黑树的关联容器,自动按键排序,支持O(log n)查找、插入和删除。需包含头文件,定义为map,可使用{}初始化。通过下标[]访问会自动创建默认值,insert()和emplace()更安全高效。查找用find()或count(),删除用erase()。元素按键升序排列,可用范围for或迭代器遍历。常用操作包括size()、empty()、clear()等。键类型需支持比较,自定义类型需提供比较规则。

C++ 中的 map 是标准模板库(STL)中非常实用的关联容器,它以键值对(key-value pair)的形式存储数据,并自动根据键进行排序。map 的底层通常基于红黑树实现,因此查找、插入和删除操作的时间复杂度为 O(log n),适用于需要快速查找和有序遍历的场景。
map 的基本定义与初始化
要使用 map,需要包含头文件 。其模板参数有两个:键类型(key)和值类型(value)。
基本语法:
map示例:
立即学习“C++免费学习笔记(深入)”;
-
map
studentScores; —— 用姓名作为键,成绩作为值。 -
map
idToName; —— 用编号映射名字。
支持直接初始化(C++11 起):
map插入与访问元素
map 提供多种方式插入和访问键值对:
- 下标操作符 [ ]:通过键访问对应的值。若键不存在,则自动创建并用默认值初始化。 studentScores["Alice"] = 95;
- insert() 方法:更安全地插入,避免意外创建元素。 studentScores.insert(make_pair("David", 88));
- emplace():原地构造,效率更高。 studentScores.emplace("Frank", 85);
cout
// 或使用 { }
studentScores.insert({"Eve", 92});
注意:使用 [ ] 访问不存在的键会自动插入该键并赋予默认值(如 int 为 0),可能影响判断逻辑。
查找与删除元素
map 提供了高效的查找方法:
- find(key):返回指向该键值对的迭代器,未找到则返回 end()。 auto it = studentScores.find("Alice");
- count(key):返回 1(存在)或 0(不存在)。map 中键唯一,所以最多返回 1。 if (studentScores.count("Bob")) {
if (it != studentScores.end()) {
cout second;
}
cout }
删除元素使用 erase():
- erase(key):按键删除。
- erase(iterator):按迭代器删除。 studentScores.erase("Bob");
studentScores.erase(it); // it 为有效迭代器
遍历 map
map 中的元素按键升序排列,可使用迭代器或范围 for 循环遍历:
for (const auto& pair : studentScores) {cout }
也可使用传统迭代器:
for (auto it = studentScores.begin(); it != studentScores.end(); ++it) {cout first " second }
其他常用操作
- size():返回元素个数。
- empty():判断是否为空。
- clear():清空所有元素。
- begin()/end():获取首尾迭代器。
例如:
if (!studentScores.empty()) {cout }
基本上就这些。map 在处理键值映射时非常直观高效,掌握它的基本用法能显著提升 C++ 编程效率。注意键的类型必须支持比较操作(如










