![](/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.