簡體   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