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 <map>
#include <iostream>
using namespace std;
int main() {
map<string int> m;
// 方式1:operator[]
m["apple"] = 10; // 插入或更新
m["banana"] = 20;
// 方式2:insert()
auto ret1 = m.insert({"cherry", 30}); // 成功,ret1.second 为 true
auto ret2 = m.insert({"apple", 99}); // 失败(key 已存在),ret2.second 为 false
cout <h3>查找元素:find() 和 operator[] 的区别</h3>
<p>查找推荐用 <font color="blue">find()</font>,因为它不修改 map,且能区分“key 不存在”和“key 存在但 value 为默认值”:</p>
<ul>
<li>
<font color="blue">find(key)</font> 返回 iterator,等于 end() 表示未找到;安全、高效、语义清晰。</li>
<li>
<font color="blue">operator[](key)</font> 在 key 不存在时会**插入**一个默认构造的 value,改变容器状态,不适合只读查找。</li>
</ul>
<p>示例:</p>
<pre class="brush:php;toolbar:false;">auto it = m.find("grape");
if (it != m.end()) {
cout first second <h3>删除元素:erase()</h3><p><font color="blue">erase()</font> 支持三种调用形式:</p>
- 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 <h3>其他实用细节</h3>
- map 默认升序排列(用 less
),可传自定义比较器,如 map > 实现降序。 - size() 返回元素个数,empty() 判断是否为空,clear() 清空全部元素。
- key_type、mapped_type、value_type 是常用类型别名,增强泛型代码可读性。
C++免费学习笔记(深入):立即使用
在学习笔记中,你将探索 C++ 的入门与实战技巧!










