map 是 C++ 标准库中基于红黑树实现的关联容器,自动按 key 有序排列,支持快速查找、插入和删除(平均时间复杂度 O(log n)),要求 key 可比较(默认使用 less 比较)。

map 是 C++ 标准库中基于红黑树实现的关联容器,自动按 key 有序排列,支持快速查找、插入和删除(平均时间复杂度 O(log n))。它要求 key 可比较(默认使用
插入元素:operator[] 和 insert
常用两种方式插入键值对:
- operator[]:若 key 不存在则默认构造 value 并插入;若已存在则覆盖 value。适合“写多读少”或需要默认初始化的场景。
-
insert():只在 key 不存在时插入,返回 pair
,second 表示是否成功插入。更安全,避免意外覆盖。
示例:
#include
查找元素:find() 和 operator[] 的区别
查找推荐用 find(),因为它不修改 map,且能区分“key 不存在”和“key 存在但 value 为默认值”:
立即学习“C++免费学习笔记(深入)”;
- find(key) 返回 iterator,等于 end() 表示未找到;安全、高效、语义清晰。
- operator[](key) 在 key 不存在时会**插入**一个默认构造的 value,改变容器状态,不适合只读查找。
示例:
auto it = m.find("grape");
if (it != m.end()) {
cout << "Found: " << it->first << " = " << it->second << endl;
} else {
cout << "Not found" << endl;
}
删除元素:erase()
erase() 支持三种调用形式:
- erase(iterator):删除单个元素(推荐,O(1) 平摊)
- erase(key):删除指定 key 的元素(返回删除个数,map 中总是 0 或 1)
- erase(first, last):删除 [first, last) 区间内所有元素
注意:用 iterator 删除后,该 iterator 失效,不要继续使用;但 erase 返回下一个有效 iterator(C++11 起),可用于遍历时安全删除:
// 安全遍历删除满足条件的元素
for (auto it = m.begin(); it != m.end(); ) {
if (it->second < 15) {
it = m.erase(it); // erase 返回下一个 iterator
} else {
++it;
}
}









