社区
C++ 语言
帖子详情
stl的hash_map在release下做了什么优化
oblivi
2018-08-05 10:50:06
为什么插入速度比map和set还要快,是用什么算法判断key是否存在的
...全文
126
2
打赏
收藏
stl的hash_map在release下做了什么优化
为什么插入速度比map和set还要快,是用什么算法判断key是否存在的
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
2 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
zilaishuichina
2018-08-06
打赏
举报
回复
map和set的本质是树,向树上插入一个节点,需要从根节点开始向下找到合适的位置(logN的复杂度),插入节点,插入节点后大部分情况下还存在打破树的平衡性,需要通过旋转节点,调整树结构,使树保持平衡。
hashmap插入节点只是算一个hash(key),然后放到对应的位置,如果对应位置已经被占了,2种处理,一种是相同hash(key)的,链成链表,另一种是用备选hash函数再hash一次,放到新位置上。
只有当hashmap满了(达到扩容临界了),那一次的插入,会导致hashmap扩容,然后rehash,这一次是比较慢的,其他情况下,计算hash(key),一个O(1)的复杂度,显然要比树的2分查找(logN的复杂度),要快很多
蠓虫带着秤砣飞
2018-08-06
打赏
举报
回复
做了hash计算啊,对比的时候,只要对比hash值就好了,不用对比字符串了。量少的时候没什么区别,量越大差别越大。
赵4老师
2018-08-06
打赏
举报
回复
提醒:stl的hash_map是开源的。
C++
STL
中哈希表
hash
_
map
从头到尾详细介绍
目录(?)[+]0 为什么需要
hash
_
map
用过
map
吧?
map
提供一个很常用的功能,那就是提供key-value的存储和查找功能。例如,我要记录一个人名和相应的存储,而且随时增加,要快速查找和修改:岳不群-华山派掌门人,人称君子剑 张三丰-武当掌门人,太极拳创始人 东方不败-第一高手,葵花宝典 ...这些信息如果保存下来并不复杂,但是找起来比较麻烦。例如我要找"张三丰"的信息,最傻的方法就是取...
【C++容器】vector、
map
、
hash
_
map
、unordered_
map
四大容器的性能分析【2023.02.28】
四个容器,占用内存其实差不太多,至少我插入20000条数据差别不大。插入的话性能
hash
_
map
和unordered_
map
差,
hash
_
map
最差。
map
插入最快。查找的话vector最差,
hash
_
map
和unordered_
map
好,
hash
_
map
最好,
map
的性能也不错。注意:插入的时候
hash
_
map
与unordered_
map
存在耗时峰值,这个应该是数据拷贝导致。如果插入密集的程序,用这两个容器可能导致程序性能不稳定。
C++笔记:
STL
扩展
hash
_
map
熟悉
STL
或熟悉ACM/ICPC的话,其中的set,
map
, multiset, multi
map
一定用过无数次了,它们都是用平衡二叉树(红黑树)实现的,复杂度为O(lgn)。我们也知道set,
map
可以通过哈希来实现,复杂度只有O(1),可惜直到现在,unsorted_set或
hash
_
map
都没能成为C++标准的一部分(C++0x,- -b)。不过无论在GNU GCC中还是Microsof
什么时候需要用
hash
_
map
,什么时候需要用
map
?
大家都知道在C++的
STL
中
map
是使用树来
做
查找算法,而
hash
_
map
使用
hash
表来排列配对,是使用关键字来计算表位置。那使用起来他们的差别主要是什么呢?对于性能差别是什么,适合什么情况下应用呢?于是我对它们进行了一些测试,并记录了测试数据供大家分享。 测试的内容主要是
map
和
hash
_
map
的添加、删除、查找和遍历操作,首先进行了几组测试,分别是10万次、30万次,时间单位均为毫
STL
中
map
与
hash
_
map
容器的选择收藏
STL
中
map
与
hash
_
map
容器的选择收藏 新一篇: 赶论文 | 旧一篇: 12月20日2 function StorePage(){d=document;t=d.selection?(d.selection.type!=None?d.selection.createRange().text:):(d.getSelection?d.getSelection()
C++ 语言
64,282
社区成员
250,470
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章