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
相关推荐
Wang's Blog6 小时前
Go-Zero 项目开发43:基于 Filebeat 收集各个服务的日志信息
开发语言·golang·go-zero·filebeat
丈剑走天涯7 小时前
JDK 17 正式特性
java·开发语言
秋田君7 小时前
QT_QFontDialog类字体对话框
开发语言·qt
圣光SG8 小时前
Java操作题练习(七)
java·开发语言·算法
麻瓜老宋9 小时前
AI开发C语言应用按步走,表达式计算器calc的第二十三步,多行输入、进制输出、错误恢复、常量折叠、配置加载等
c语言·开发语言·atomcode
q567315239 小时前
企业级 HTTP 代理采购选型:技术评估清单 15 项
开发语言·网络·爬虫·网络协议·http·隧道ip·代理ip
天天进步201510 小时前
Python全栈项目--智能办公自动化系统
开发语言·python
拳里剑气10 小时前
C++算法:多源BFS
c++·算法·宽度优先·多源bfs
cm04Z9c9110 小时前
C#摸鱼实录——IoC与DI案例详解
开发语言·c#
ysa05103011 小时前
【板子】短序列dp(换成维护更小常数维度的dp)
c++·笔记·算法·板子