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
相关推荐
Vallelonga1 分钟前
Rust 中 unsafe 关键字的语义
开发语言·rust
AI砖家5 分钟前
前端 JavaScript 异步处理全方案详解:从回调到 Observable
开发语言·前端·javascript
熬夜敲代码的猫8 分钟前
AVL树(C++详解版)
数据结构·c++·算法
思麟呀9 分钟前
C++工业级日志项目(七)日志器核心
linux·开发语言·c++·windows
2401_873479409 分钟前
如何用IP离线库批量清洗订单IP,自动标注省市区?
开发语言·网络·python
郝学胜_神的一滴13 分钟前
Qt 高级开发 019:从零定制登录窗口按钮、Logo 样式与交互悬浮效果
c++·qt
lcj251114 分钟前
vector的基本使用 + 手搓成员变量 size capacity begin end operator[] reserve扩容 拷贝构造 赋值析构
开发语言·c++·笔记·面试
liulilittle25 分钟前
C++ do_div 宏
c++
GHL28427109026 分钟前
Qt Creator 19.0.0 (Community)下载
开发语言·qt