繁体   English   中英

C ++ unordered_map的rehash()和reserve()方法有什么区别?

[英]What's the difference between the rehash() and reserve() methods of the C++ unordered_map?

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

差异在于目的 ,尽管两者都在做类似的事情。

  • rehash采用现有地图并重建大小的存储桶,在此过程中重新运行并将元素重新分配到新存储桶中。

  • reserve保证如果你不插入超过保留数量的元素,就不会有重复(即你的迭代器将保持有效)。

这些是两个有些不同的东西,尽管是相关的。 rehash不会给你任何保证,而且reserve并不表示重复的目的。 使用rehash ,如果你认为你的地图是低效的,并且reserve ,如果你准备了很多插入的。

作为@Xeo指出, reserve只是周围的包装rehash ,不过,考虑到地图的允许负载因子。

来自cplusplus.com

rehash:rehash是哈希表的重建:>容器中的所有元素都根据它们的哈希值重新排列到新的桶组中。 这>可能会改变容器内元素的顺序。

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

我从这里了解到,rehash尝试根据给定的n大小来改变哈希表中的桶数。 保留将哈希表中桶的数量更改为最合适的数量,以便至少存储n(由用户给出)元素。 我希望我的发言清楚。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM