哪種效率更高?有沒有好的基準測試結果?在C++ 0x標準中將會有unordered_map,這是如何比較來提升unordered_map的?
回答
C++ 11的std :: unordered_map規範類似於基於tr1 :: unordered_map的boost :: unordered_map。這就是說,有一些小的差異。在C++ 11中添加右值引用會導致添加可能對性能有用的emplace和emplace_hint函數。
C++ 11現已被廣泛實現,因此您應該能夠使用std :: unordered_map開箱即用。 C++ 14不會顯着改變它,C++ 17將(可能)添加insert_or_assign和try_emplace成員函數。
在C++ 0x最新標準草案n3225中,有一節23.6.1類模板unordered_map。
所以它已經在那裏。
C++ 0x unordered_map is based on boost one。 Boost庫本身也有一個名稱空間tr1 :: unordered_map,它共享它自己的boost :: unordered_map的實現。
如果你想比較(當然你不需要比較boost和boost),我認爲其他幾個編譯器,包括microsoft visual studio 2010和gcc,都有自己的unordered_map實現。你可以通過假設他們在名字空間tr1下來使用它們。
#include <unordered_map>
...
std::tr1::unordered_map<...>
我不知道任何基準,但是我覺得在這個早期的時候,任何基準測試是沒有意義的,因爲編譯器實現者肯定會優化自己的實現時,真正的標準定稿,越來越多的人去使用圖書館。
它在'boost'命名空間中,除非你明確要求'tr1'。 – 2010-12-11 03:00:26
現在我應該使用助推器來獲得最佳性能嗎? – returneax 2010-12-11 09:37:30
你現在不應該根據預期的表現做出任何選擇。你應該使用最方便的一個,然後在你分析你的應用程序後找到優化機會,並發現'unordered_map'實現是一個瓶頸 – SingleNegationElimination 2010-12-11 15:55:33
它取決於實施和有問題的數據集。當我玩弄unordered_map
爲blog post我發現VS10的std::unordered_map
多perfromed遜於boost::unordered_map
爲我所用輸入(我沒有建立一個全面的基準)。理論上認爲不應該有區別。
一個未提及的小問題,std::hash
函數只需要能夠計算內建類型和字符串(以及其他幾種類型)的散列。函數可以計算更復雜對象的散列,如pair
和tuple
。同時boost還有一個hash_combine
函數來幫助爲用戶定義的類型創建哈希。
這意味着std::unordered_set< pair<int, int> >
不會編譯,但boost::unordered_set< pair<int, int> >
會。如果需要,您可以使用boost::hash
與std::unordered_*
。
(參考:項目6.18英寸the Library Extension Technical Report Issues List)
我發現這實際上是非常重要的信息。你不可避免地發現自己正在處理你需要編寫散列函數的類。所以即使在2014年,由於能夠輕鬆創建哈希函數,我在存儲自己類的hashmaps時仍堅持使用boost :: unordered_set。 – moodboom 2014-01-06 17:05:28
- 1. 比較unordered_map vs unordered_set
- 2. C++:unordered_map,不可比較的迭代器
- 3. C++ unordered_map其中鍵也unordered_map
- 4. 如何標準:: unordered_map從水桶
- 5. unordered_map C++
- 6. :在unordered_map(C++)
- 7. 插入unordered_map的unordered_map?
- 8. 初始化靜態提升:: unordered_map
- 9. C++存儲在unordered_map
- 10. C++,如何通過unordered_map
- 11. C++ unordered_map問題
- 12. unordered_map對值C++
- 13. C++ std :: unordered_map
- 14. 在C++中同步unordered_map
- 15. 向量的C++ unordered_map
- 16. 在C++中將csv讀入unordered_map
- 17. 如何獲得隨機元素提升unordered_map?
- 18. 比較XPS和PDF,這將是未來的標準?
- 19. C++中的unordered_map錯誤?
- 20. unordered_map中operator []的C++特化
- 21. 如果桶中只有一個項目,可以提升unordered_map或其他散列表,跳過相等比較嗎?
- 22. 什麼是unordered_map C++中的條目
- 23. C++ compare unordered_map hash keys
- 24. 創建2D unordered_map C++
- 25. 這個C++ unordered_map如何有四個值?我認爲這是一個鍵值對
- 26. 與unordered_map
- 27. 在unordered_map中插入模板值時出錯提升
- 28. 標準要求std :: unordered_map是否將鍵值對放在內存中?
- 29. C++:tusing升壓unordered_map錯誤:沒有匹配的函數調用
- 30. boost :: unordered_map是...命令?
我認爲的C++ 0x標準沒有規定的執行,所以這將是標杆相當困難。你真的要求特定的stl實現嗎? – lijie 2010-12-11 01:35:08
而不是STL的無序映射從Boost導入到C++標準的功能之一? – Kos 2010-12-11 01:39:18
C++ 0x unordered_map不基於boost庫,它基於在boost庫中的實現之前定義的TR1 unordered_map。 – hmuelner 2010-12-13 13:28:33