2013-02-13 151 views

回答

7

區別在於目的,雖然兩者都在做類似的事情。

  • rehash採用現有的地圖和重建一個新大小桶的,重散列的過程中和再分配元件到新水桶。

  • reserve保證你,如果你沒有插入超過保留數量的元素,將不會重新散列(即你的迭代器將保持有效)。

這些是兩個有點不同的東西,儘管有關。 rehash不給你任何保證,並且reserve不表示重新哈希的目的。如果您認爲地圖效率低下,請使用rehash;如果您準備進行大量插入,請使用reserve

正如@Xeo指出的那樣,reserve只是一個圍繞rehash的包裝,但考慮到了地圖的允許載荷係數。

+4

'reserve'指定爲rehash(ceil(n/max_load_factor()))' – Xeo 2013-02-13 10:28:09

+0

請注意,當前的gcc實現將在您插入完全保留的數字時重新哈希(因此您可能需要保留一個額外的)。 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71181上的討論表明,此行爲不符合C++標準的更新版本(因此將來可能會修復此版本)。 – user118662 2016-10-01 16:22:57

0

cplusplus.com

翻版:一個翻版是哈希表的重構:在>容器中的所有元件根據他們的哈希值到新的一組桶的重新排列。這>可能會改變容器內元素的順序。

reserve:將容器中的桶數(bucket_count)設置爲最合適的>以包含至少n個元素。

我從這裏可以理解,rehash試圖改變散列表中關於給定n的大小的桶數。爲了存儲至少n個(由用戶給出)元素,保留將散列表中的桶的數量改變爲最適合的數量。我希望我明確表示我的發言。

相關問題