map与unordered_map区别

底层实现区别

map 的底层实现是基于红黑树实现的,红黑树又属于二叉搜索树,具有自动排序的功能,所以map天然具有自动排序的功能,而红黑树上的节点都代表着map的元素。对于map的操作就是对红黑树进行操作,复杂度为O(log n)。

unordered_map 的底层实现是基于哈希表(散列表)实现的,它通过哈希函数将键直接映射到哈希表中的存储位置,从而实现快速定位与访问。哈希表依靠哈希算法完成键到位置的转换,因此 unordered_map不具备自动排序功能,元素存储顺序完全由哈希结果决定。我们对 unordered_map 的操作本质上是对哈希表进行寻址、插入和冲突处理,平均时间复杂度可以达到 O(1),查询效率极高。

原理图展示:


函数实现

map 与 unordered_map 函数接口对比:

两者对外提供的成员函数几乎完全一致,使用方式相同,区别只在底层与特性:

插入:insert()、operator\[\]

查找:find()

删除:erase()

遍历:范围 for / 迭代器

容量:size()、empty()、clear()

键存在判断:count()(map 返回 0/1,unordered_map 也一样)

函数实现区别:(通过部分函数的使用来解说函数的实现区别)

map 的底层是红黑树,而红黑树本质是一棵二叉搜索树,因此同样遵循左子树节点值小于根节点、右子树节点值大于根节点 的排序规则,这也是 map 元素能够自动有序的根本原因。。当查找时从根节点按大小比较向下遍历,插入时找到适合位置后通过旋转保持平衡,删除后同样需要平衡(这里的平衡就是让树接着保持红黑树左小右大的特性),所有操作复杂度为O(log n)。

unordered_map的底层是哈希表,通过哈希函数将键映射到对于桶位置。查找时直接通过哈希值定位桶,插入时放入对应桶并处理冲突,删除时只需要移除对应桶的元素。平均复杂度为O(1),但不保顺序。


总结

|--------|---------------|------------------|
| 容器 | map | unordered_map |
| 效率 | O(log n) | 平均为O(1),最坏为O(n) |
| 内存对比 | 较高(红黑树存储额外指针) | 更高(哈希表存在空闲桶) |
| key值对比 | 必须支持<运算符 | 必须支持哈希函数与 == 运算符 |
| 迭代器对比 | 双向迭代器 | 前向迭代器 |
| 适用场景 | 排序需求、数据量小、稳定 | 速度需求、无速度需求、数据量大 |

相关推荐
爱刷碗的苏泓舒1 小时前
PPP-AR 中的参考星选取:数学原理、评价指标与切换处理
算法·gnss·模糊度固定·ppp-ar·星间单差·参考星·卫星端偏差
烬羽4 小时前
递归老写崩?一个"退回"公式,把回溯题变成填空题
javascript·深度学习·算法
闪电悠米4 小时前
力扣hot100-41.缺失的第一个正数-原地哈希详解
数据结构·算法·哈希算法
星空露珠5 小时前
28种颜色对应名称,
开发语言·数据库·算法·游戏·lua
QXWZ_IA6 小时前
桥梁数字孪生怎么落地?
人工智能·科技·算法·智能硬件·政务
Kel6 小时前
输出层与反分词(Output Layer & Detokenization)
人工智能·算法·架构
陕西企来客7 小时前
2026年7月技术好GEO优化方案:算法适配与内容策略
人工智能·算法·机器学习·技术好geo优化
风栖柳白杨7 小时前
【面试】AI算法工程师_空白自测版本
人工智能·算法·面试
闪电悠米8 小时前
力扣hot100-73.矩阵置零-标记数组详解
算法·leetcode·矩阵
栋***t8 小时前
从“纸质试卷”到“AI智能组卷”,麦塔在线考试系统如何重构出题逻辑?
java·大数据·人工智能·算法·重构