C++ unordered_map
的rehash()
和reserve()
方法有什麼區別?爲什麼需要兩種不同的方法?C++ unordered_map的rehash()和reserve()方法有什麼區別?
4
A
回答
7
區別在於目的,雖然兩者都在做類似的事情。
rehash
採用現有的地圖和重建一個新大小桶的,重散列的過程中和再分配元件到新水桶。reserve
保證你,如果你沒有插入超過保留數量的元素,將不會重新散列(即你的迭代器將保持有效)。
這些是兩個有點不同的東西,儘管有關。 rehash
不給你任何保證,並且reserve
不表示重新哈希的目的。如果您認爲地圖效率低下,請使用rehash
;如果您準備進行大量插入,請使用reserve
。
正如@Xeo指出的那樣,reserve
只是一個圍繞rehash
的包裝,但考慮到了地圖的允許載荷係數。
0
翻版:一個翻版是哈希表的重構:在>容器中的所有元件根據他們的哈希值到新的一組桶的重新排列。這>可能會改變容器內元素的順序。
reserve:將容器中的桶數(bucket_count)設置爲最合適的>以包含至少n個元素。
我從這裏可以理解,rehash試圖改變散列表中關於給定n的大小的桶數。爲了存儲至少n個(由用戶給出)元素,保留將散列表中的桶的數量改變爲最適合的數量。我希望我明確表示我的發言。
相關問題
- 1. unordered_map reserve的行爲
- 2. 算法和方法有什麼區別
- 3. 'remove'和'removeChild'方法有什麼區別?
- 4. Html.Partial和Html.Action方法有什麼區別?
- 5. browser.sleep()和browser.wait()方法有什麼區別?
- 6. 方法`toHaveBeenCalled()`和`andCalledThrough()`有什麼區別?
- 7. 'configure'和'configureGlobal'方法有什麼區別?
- 8. bcrypt()和crypt()方法有什麼區別?
- 9. GET和POST方法有什麼區別?
- 10. UrlHelper.Route和UrlHelper.Link方法有什麼區別?
- 11. nibNameOrNil和ViewDidLoad方法有什麼區別?
- 12. 方法和協議有什麼區別
- 13. boost :: unordered_map缺少reserve()像std :: unordered_map
- 14. Objective-C函數和Objective-C方法有什麼區別?
- 15. C++ Builder 6和C++ Builder Seatle For IntToStr方法有什麼區別?
- 16. C++中的方法和成員有什麼區別?
- 17. 什麼區別\\。\ C:和\\。\ C:\
- 18. char [] c和char c []有什麼區別?
- 19. Managed C++和C++/CLI有什麼區別?
- 20. Visual C++和C++有什麼區別?
- 21. \ c和\\ c有什麼區別?
- 22. c#和visual c#有什麼區別?
- 23. printf中%c和%C有什麼區別?
- 24. 託管C++和C#有什麼區別?
- 25. C++和C++ CLI有什麼區別
- 26. 方法重載和方法重寫有什麼區別Ios
- 27. ToString和GetDisplayText方法有什麼區別C#
- 28. UITableView方法和等效的UITableViewDatasource方法有什麼區別?
- 29. Python中的string方法和str方法有什麼區別?
- 30. 非虛擬方法和密封方法有什麼區別?
'reserve'指定爲rehash(ceil(n/max_load_factor()))' – Xeo 2013-02-13 10:28:09
請注意,當前的gcc實現將在您插入完全保留的數字時重新哈希(因此您可能需要保留一個額外的)。 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71181上的討論表明,此行爲不符合C++標準的更新版本(因此將來可能會修復此版本)。 – user118662 2016-10-01 16:22:57