stl的hash_map在release下做了什么优化

oblivi 2018-08-05 10:50:06
为什么插入速度比map和set还要快,是用什么算法判断key是否存在的
...全文
126 2 打赏 收藏 转发到动态 举报
写回复
用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的复杂度),要快很多
  • 打赏
  • 举报
回复
做了hash计算啊,对比的时候,只要对比hash值就好了,不用对比字符串了。量少的时候没什么区别,量越大差别越大。
赵4老师 2018-08-06
  • 打赏
  • 举报
回复
提醒:stl的hash_map是开源的。

64,282

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧