![](/img/trans.png)
[英]What is the difference between unordered_map::emplace and unordered_map::insert in C++?
[英]What's the difference between the rehash() and reserve() methods of the C++ unordered_map?
C ++ unordered_map
的rehash()
和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.