当前位置: 首页 > news >正文

Hashmap 和 map的区别

✅ 1. 本质区别

特性std::mapstd::unordered_map(哈希表)
数据结构红黑树(平衡二叉搜索树)哈希表(Hash Table)
键值对有序吗?✅ 有序(按 key 升序排列)❌ 无序(由哈希函数决定)
查找/插入/删除时间复杂度O(log n)平均 O(1),最坏 O(n)
使用的底层机制树结构,自动排序哈希函数 + 拉链法等冲突解决

✅ 2. C++ 中的具体类名

类型C++ STL 名称属于哪个头文件
有序 mapstd::map<map>
无序 map(哈希表)std::unordered_map<unordered_map>

✅ 3. 使用场景建议

场景推荐使用
需要按 key 排序遍历std::map
只关注 key 的存在与否、查找效率std::unordered_map
高频查找、插入的场景,如 LeetCode 的 two sumstd::unordered_map
有大量数据,性能敏感std::unordered_map(但注意 hash 冲突)

哈希函数的核心意义:加速查找(从 O(n) → O(1))

结论: 如果key不用排序,无脑用hashmap就行

操作复杂度对比表

容器类型插入(Insert)查找(Find)更新(Update)是否有序适用场景
std::vectorO(1) 末尾O(n) 任意O(n)O(n)顺序存储,大量遍历/索引
std::listO(1) 已知位置O(n)O(n)O(n)频繁插入/删除,顺序不重要
std::mapO(log n)O(log n)O(log n)有序映射,需要 key 排序
std::unordered_mapO(1) 平均O(n) 最坏O(1) 平均O(n) 最坏O(1) 平均O(n) 最坏快速 key-value 存储查找

 

使用选择建议

场景推荐容器
快速查找 key-valueunordered_map
查找 + key 排序map
按索引查 + 顺序处理vector
频繁插入删除 + 顺序list

情况推荐容器原因说明
频繁遍历所有元素vector连续内存 + cache 友好 + 快速读取
频繁插入/删除中间元素list插入/删除 O(1),不用移动后续元素
查找元素是否存在(按 key)unordered_map哈希查找快

 

vector list对比

对比点vector(数组)list(链表)
内存布局连续内存非连续,节点分散
遍历方式顺序访问,支持索引通过指针跳转,每个节点跳一次
CPU cache 命中率高(预取 + 缓存行友好)低(跳跃式访问,缓存失效)
实际遍历性能快得多,几乎是线性流式处理明显慢,每个节点都需解引用指针访问

 

相关文章:

  • 单片机开发软件
  • mysql数据库-3 (主从复制)
  • Windows AD 域客户端电脑时间不准解决方案
  • 卷积神经网络和深度神经网络的区别是什么?
  • 地球阿米特黑客组织使用新型工具攻击军用无人机供应链
  • 常见三维引擎坐标轴 webgl threejs cesium blender unity ue 左手坐标系、右手坐标系、坐标轴方向
  • TypeScript:类
  • 达利欧:“交易的艺术”与“背后的力量”
  • 了解光学影像
  • C#自定义控件-实现了一个支持平移、缩放、双击重置的图像显示控件
  • OpenCV人脸识别EigenFace算法、案例解析
  • MySQL 开发的智能助手:通义灵码在 IntelliJ IDEA 中的应用
  • 自营交易考试为何出圈?一场模拟交易背后的真实竞争
  • 为什么elasticsearch配置文件JVM配置31G最佳
  • 世界模型+大模型+自动驾驶 论文小汇总
  • 数据结构(九)——排序
  • Xournal++:开源跨平台笔记软件,手写与创作的完美结合
  • SQL笔记一
  • 1267, “Illegal mix of collations (latin1_swedish_ci,IMPLICIT
  • Spring MVC 接口的访问方法如何设置
  • 张涌任西安市委常委,已卸任西安市副市长职务
  • 国务院办公厅印发《国务院2025年度立法工作计划》
  • 国内首家破产的5A景区游客爆满,洛阳龙潭大峡谷:破产并非因景观不好
  • 在地球另一端的交流,架起2万公里间更多共赢的桥梁
  • 上海交大计算机学院成立,设多个拔尖人才特色班
  • 听企业聊感受,《外企聊营商》5月13日起推出