unordered_map比map慢?
先说结论:unordered_map不维护键的顺序,因此不能按顺序访问元素,因此如果你需要遍历表时若选用unordered_map就肯定比map慢
1. 数据结构与底层实现
unordered_map:基于 哈希表 实现。- 优点:平均情况下插入、查找和删除操作的时间复杂度为 O(1)O(1)O(1)。
- 缺点:最坏情况下,时间复杂度可能退化为 O(n)O(n)O(n)(当哈希冲突严重时)。
- 无序存储,不能按键排序。
map:基于 红黑树(自平衡二叉搜索树) 实现。- 优点:插入、查找和删除操作的时间复杂度始终为 O(logn)O(\log n)O(logn)。
- 缺点:由于需要维护树的平衡,常数因子较大。
- 按键排序,支持有序遍历。
2. 插入和查找性能
unordered_map优势:在大多数情况下,unordered_map插入和查找的性能优于map,因为其平均时间复杂度为 O(1)O(1)O(1)。map劣势:map的插入和查找性能稍慢,时间复杂度为 O(logn)O(\log n)O(logn)。
例外情况:
- 哈希冲突严重:如果
unordered_map的哈希函数设计不佳或数据分布极端(如大量相同的哈希值),性能可能退化为 O(n)O(n)O(n)。 - 小规模数据:对于数据规模较小的情况,
map的性能可能优于unordered_map,因为红黑树的实现有较少的额外开销。
3. 内存使用
unordered_map缺点:由于哈希表需要额外的存储空间(如空槽和链表节点),unordered_map通常比map占用更多内存。map优势:map是基于树的实现,占用内存相对较少。
4. 顺序访问
unordered_map缺点:unordered_map不维护键的顺序,因此不能按顺序访问元素。map优势:map自动按键的升序(或指定的比较函数)维护元素顺序,支持有序遍历。
5. 插入、删除时对迭代器的影响
unordered_map:当发生哈希表的重哈希(rehash)操作时,会使所有迭代器失效。map:插入和删除元素只会影响相关位置的迭代器,其余迭代器不会失效。
6. 适用场景
| 场景 | 推荐使用容器 | 原因 |
|---|---|---|
| 快速查找/插入操作 | unordered_map |
平均时间复杂度 O(1)O(1)O(1)。 |
| 数据需要按键排序 | map |
支持有序遍历。 |
| 数据规模较小 | map |
红黑树常数因子较小。 |
| 内存有限 | map |
unordered_map 占用内存较大。 |
| 哈希函数性能不佳或数据分布差 | map |
unordered_map 性能退化明显。 |
总结
- 如果需要快速插入、删除和查找操作且不关心顺序,优先选择
unordered_map。 - 如果需要按键排序或者可能遇到哈希冲突问题,选择
map。 - 如果内存占用敏感,选择
map。
unordered_map比map慢?的更多相关文章
- C++11 新特性: unordered_map 与 map 的对比
unordered_map和map类似,都是存储的key-value的值,可以通过key快速索引到value.不同的是unordered_map不会根据key的大小进行排序, 存储时是根据key的ha ...
- hash_map vs unordered_map vs map vs unordered_set
hash_map vs unordered_map 这两个的内部结构都是采用哈希表来实现.unordered_map在C++11的时候被引入标准库了,而hash_map没有,所以建议还是使用unord ...
- (转)unordered_map与map的对比(C++11新特性)
unordered_map和map类似,都是存储的key-value的值,可以通过key快速索引到value.不同的是unordered_map不会根据key的大小进行排序, 存储时是根据key的ha ...
- unordered_map 与 map 的对比(转)
unordered_map和map类似,都是存储的key-value的值,可以通过key快速索引到value.不同的是unordered_map不会根据key的大小进行排序, 存储时是根据key的ha ...
- map 与 unordered_map
两者效率对比: #include <iostream> #include <string> #include <map> #include <unordere ...
- map,hash_map和unordered_map 实现比较
map介绍 Map是STL[1]的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处 ...
- map和unordered_map的差别和使用
map和unordered_map的差别还不知道或者搞不清unordered_map和map是什么的,请见:http://blog.csdn.net/billcyj/article/details/7 ...
- 【转】Map 与 Unordered_map
map和unordered_map的差别和使用 map和unordered_map的差别还不知道或者搞不清unordered_map和map是什么的,请见:http://blog.csdn.net/b ...
- STL——map/unordered_map基础用法
map /multimap map是STL里重要容器之一. 它的特性总结来讲就是:所有元素都会根据元素的键值key自动排序(也可根据自定义的仿函数进行自定义排序),其中的每个元素都是<key, ...
- C++ map与unordered_map
map与unordered_map对比 map unordered_map 红黑树(非严格二叉平衡搜索树)实现 哈希表实现 有序 无序 -- 查找时间复杂度为O(1),非常快 空间消耗较大 空间消耗较 ...
随机推荐
- Linux 日志管理基础
目录 基本介绍 日志的存放 存放目录与存放内容 举例说明 日志管理服务: rsyslogd 功能与配置 检查自启动 配置文件 /etc/rsyslog.conf 修改配置文件 基本介绍 日志文件是重要 ...
- 【一步步开发AI运动小程序】十四、主包超出2M大小限制,如何将插件分包发布?
随着人工智能技术的不断发展,阿里体育等IT大厂,推出的"乐动力"."天天跳绳"AI运动APP,让云上运动会.线上运动会.健身打卡.AI体育指导等概念空前火热.那 ...
- SQL注入sqlmap联动burpsuite之burp4sqlmap++插件
目录 sqlmap和burpsuite介绍 sqlmap4burp++介绍 sqlmap4burp++的使用 小插曲:sqlmap报错文件不存在怎么办? 官方扩展CO2之SQLmapper sqlma ...
- 数据抽取平台pydatax使用案例---11个库项目使用
数据抽取平台pydatax,前期项目做过介绍: 1,数据抽取平台pydatax介绍--实现和项目使用 项目2: 客户有9个分公司,用的ERP有9套,有9个库,不同版本,抽取的同一个表字段长度有不一样, ...
- VulnHub-Sick0s1.1解法二shellshock漏洞
免责声明 本博客提供的所有信息仅供学习和研究目的,旨在提高读者的网络安全意识和技术能力.请在合法合规的前提下使用本文中提供的任何技术.方法或工具.如果您选择使用本博客中的任何信息进行非法活动,您将独自 ...
- 2019-2020 ACM-ICPC Brazil Subregional Programming Contest
D. Denouncing Mafia 给定一颗树,然后给定\(k\)个起点,对于每个起点来说,从该点到根节点的一条链都会被染色,求最多有几个点会被染色 \(3 \leq n \leq 1e5, 1 ...
- offline RL · PbRL | LiRE:构造 A>B>C 的 RLT 列表,得到更多 preference 数据
论文标题:Listwise Reward Estimation for Offline Preference-based Reinforcement Learning,ICML 2024. arxiv ...
- linux 安装 docker
1.安装 yum-utils yum install -y yum-utils \ device-mapper-persistent-data \ lvm2 --skip-broken 执行如果 报错 ...
- 实现不可逆加密文件:探索 GodoOS 的安全机制
在当今数字化时代,数据安全成为了企业和个人关注的重点.为了保护敏感信息不被未授权访问,各种加密技术应运而生.本文将探讨 GodoOS 项目中实现的一种不可逆加密文件的方法,重点介绍其背后的原理和技术细 ...
- 记一次 .NET某差旅系统 CPU爆高分析
一:背景 1. 讲故事 前些天训练营里的一位学员找到我,说他们的差旅后台系统出现了CPU爆高的情况,爆高之后就下不去了,自己分析了下也没找到原因,事情比较紧急,让我帮忙看下是什么回事,手里也有dump ...