C++ - STL中map和unordered_map区别
头文件
-
map:
#include<map>
-
unordered_map:
#include<unordered_map>
底层实现
-
<map>
:内部是红黑树。所以对map进行遍历,结果会根据key
值进行自动排序,且为 升序 。- 补充:红黑树是非严格平衡二叉搜索树,而AVL是严格平衡二叉搜索树。
-
<unordered_map>
:内部是哈希表。所以对unordered_map进行遍历,结果是乱序的,但是每次输出都是一样的乱序顺序,即乱序内部是顺序的。
时间复杂度
-
map:因为基于红黑树,所以对于map进行的增删改查操作都相当于是对红黑树进行的操作(内部原理:判断元素是否相同+比较大小,然后插入到树中),时间复杂度为
O(logn)
。 -
unordered_map:因为基于一个哈希表(内部原理:计算元素的Hash值,根据Hash值判断元素是否相同。
- 哈希表:通过把关键码值映射到Hash表中一个位置来访问记录,可处理海量数据),所以查找的时间复杂度为
O(1)
。
- 哈希表:通过把关键码值映射到Hash表中一个位置来访问记录,可处理海量数据),所以查找的时间复杂度为
map优缺点
-
优点:有序、大部分操作的时间效率高。
-
缺点: 空间占用率高(因为内部实现了红黑树,虽然提高了运行效率,但因为每个节点都需要额外保存父节点、孩子节点、红/黑性质,使得每一个节点都占用大量的空间)。
unordered_map优缺点
-
优点:查找速度快。
-
缺点:建立哈希表较耗时间,所以占用的内存要高。
使用场景分析
-
map:基于 有序性 进行操作,用map。
-
unordered_map:对于 查找 相关问题,用unordered_map。
操作
-
map: 戳我的这篇随笔
-
unordered_map:和map差不多使用
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
2020-03-16 寒假Day53:Codeforces519B-水题
2020-03-16 寒假Day52:Codeforces270A-Fancy Fence-简单多边形公式变形