首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++的rehash()和unordered_map ()方法有什么不同?

C++的rehash()和unordered_map ()方法有什么不同?
EN

Stack Overflow用户
提问于 2013-02-13 18:21:16
回答 2查看 4.1K关注 0票数 10

C++ unordered_maprehash()reserve()方法有什么不同?为什么需要两种不同的方法?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-13 18:26:21

不同之处在于目的,尽管两者都在做类似的事情。

  • rehash采用现有的映射并重新构建新大小的存储桶,在此过程中进行重新散列,并将元素重新分发到新的buckets.
  • reserve中,这保证了如果您插入的元素不超过保留的元素数量,就不会进行重新散列(即迭代器将保持有效)。

这是两件有点不同的事情,尽管是相关的。rehash没有给您任何保证,reserve也没有表达重新散列的目的。如果您认为您的地图效率低下,请使用rehash;如果您准备进行大量插入,请使用reserve

正如@Xeo指出的那样,考虑到地图允许的负载因子,reserve只是rehash的一个包装器。

票数 13
EN

Stack Overflow用户

发布于 2013-02-13 18:34:48

来自cplusplus.com

重新散列:重新散列是对散列表的重建:>容器中的所有元素都根据它们的散列值重新排列到新的一组存储桶中。这可能会改变容器中元素的顺序。

保留:将容器(bucket_count)中的存储桶数量设置为最合适的>,以至少包含n个元素。

我从这里了解到,rehash试图根据给定的n个大小更改哈希表中的存储桶数量。保留将哈希表中的存储桶数量更改为最合适的数量,以便存储至少n个(由用户给定的)元素。我希望我的声明已经讲清楚了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14851249

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档