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
相关推荐
程序 代码狂人2 分钟前
切片表与分区表的区别(数据开发面试版)
java·大数据·开发语言·数据仓库·算法
meiying88381 小时前
快递单号批量查询Python脚本:从手动到自动化的完整实现
开发语言·python·自动化
@大迁世界2 小时前
告别 Go,拥抱 Rust
开发语言·golang·rust
SEO_juper2 小时前
Node.js 重定向链检测工具:301 跳了几跳、有没有成环,一次看清
xml·开发语言·python·node.js·json·bash
学逆向的2 小时前
C 指针常量与常量指针
c语言·开发语言·网络安全
低调滴开发3 小时前
3 行代码写崩一个函数?切片才是 Rust 字符串处理的正确姿势
开发语言·后端·rust
CodeYp20193 小时前
第15讲:二叉搜索树
开发语言·c++·二叉搜索树
猫猫.1533 小时前
HashTable、HashMap、ConcurrentHashMap 核心区别总结
java·开发语言·java-ee
pipixia200334 小时前
C++继承面试四连问:内存叠加、私有继承、sizeof、权限重映射
c++·面试·嵌入式·继承·面向对象·对象模型
乌暮4 小时前
综合案例:宠物电商系统
java·开发语言·spring·mvc·restful·1024程序员节