C++ STL map 系列全方位解析

我给你做一份最完整、最实用、面试必问map 全家桶总结,包含:map / unordered_map / multimap / unordered_multimap


一、map 是什么?

STL map 是一种 key-value 键值对容器,key 唯一,自动排序,快速查找。 你可以把它理解为:一本自动排序、不重复、能快速查字的字典。


二、4 种 map 对比(最重要!)

表格

容器 底层 排序 key 重复 查找速度 适用场景
map 红黑树 自动升序 不允许 O(log n) 需要有序、稳定
unordered_map 哈希表 无序 不允许 O(1) 追求最快查找
multimap 红黑树 自动升序 允许 O(log n) 一对多关系
unordered_multimap 哈希表 无序 允许 O(1) 一对多 + 超快查找

三、map 核心用法(最常用)

1. 创建 + 插入

cpp

运行

复制代码
#include <map>
using namespace std;

map<int, string> mp;

// 插入
mp[1] = "张三";
mp.insert({2, "李四"});

2. 遍历

cpp

运行

复制代码
for (auto& p : mp) {
    cout << p.first << " " << p.second << endl;
}

3. 查找

cpp

运行

复制代码
auto it = mp.find(1);
if (it != mp.end()) {
    cout << it->second;
}

4. 删除

cpp

运行

复制代码
mp.erase(1);

5. 常用函数

  • size():数量
  • empty():是否为空
  • clear():清空
  • count(key):判断 key 是否存在

四、unordered_map 用法(最快!)

和 map 用法完全一样,只是:

  • 无序
  • 查找更快
  • C++11 及以上支持

cpp

运行

复制代码
#include <unordered_map>
unordered_map<int, string> ump;

五、multimap(key 可重复)

适合 一个键对应多个值

cpp

运行

复制代码
multimap<int, string> mmp;
mmp.insert({1, "A"});
mmp.insert({1, "B"});  // 允许重复key

六、最关键的选择指南(面试 / 项目必背)

  1. 需要有序 → map
  2. 需要最快速度 → unordered_map
  3. key 可重复 → multimap
  4. key 可重复 + 超快 → unordered_multimap
相关推荐
福赖1 小时前
《C#反射机制》
开发语言·c#
cpp_25011 小时前
P1796 汤姆斯的天堂梦
数据结构·c++·算法·题解·洛谷·线性dp
Lisssaa2 小时前
打卡第二十六天
c++
向上的车轮2 小时前
熟悉C#如何转TypeScript?
开发语言·typescript·c#
wumingqilin2 小时前
QT 防抖和 节流处理
开发语言·qt
Mem0rin2 小时前
[Java/数据结构]顺序表之ArrayList
java·开发语言·数据结构
9稳2 小时前
基于PLC的生产线自动升降机设计
开发语言·网络·数据库·嵌入式硬件·plc
我是唐青枫2 小时前
C#.NET ReaderWriterLockSlim 深入解析:读写锁原理、升级锁与使用边界
开发语言·c#·.net