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
相关推荐
传奇开心果编程7 小时前
【Rust入门知识点学与练】第36课:所有权——移动、借用、Copy、切片
开发语言·学习·rust
6Hzlia7 小时前
【Classic 150 刷题计划】 LeetCode 14. 最长公共前缀 | C++ 纵向扫描法与防越界细节
c++·算法·leetcode
传奇开心果编程7 小时前
【Rust入门知识点学与练】第35课:工具链与反馈环——先学会读编译器在说什么
开发语言·学习·rust
重生之小比特8 小时前
【Java SE】字符串 - String类
java·开发语言·intellij-idea
讳疾忌医丶16 小时前
深度拆解 RocksDB 内核:基于 C++17 的 FIFO 调度状态机与温度阶梯自愈设计
java·c++·算法·架构
lsswear16 小时前
Python 并发 线程
开发语言·python
2401_8685347816 小时前
OpenStack 架构全景:八个核心组件深度拆解
c++·需求分析
郑州光合科技余经理16 小时前
国际版外卖系统:税率字段怎么和订单主流程解耦
android·java·开发语言·前端·后端·php·ai编程
软件课代表CiCi16 小时前
运行库是什么?电脑缺运行库怎么办?c++运行库缺失修复全攻略
开发语言·c++·windows·电脑·dll修复·dll丢失·运行库
Ivanqhz17 小时前
MLIR OpBuilder
开发语言·python·mlir