我正在尋找一個HashTable或字典實現在C + +中具有類似於C#中的功能? STL是否包含這樣的對象,我將如何使用它?字典/ C++中的HashTable對象?
回答
其實是完全一樣的.NET的詞典/哈希表,你要的是hash_map或unordered_map(std::map
實現爲二叉樹),hash_map
是一個擴展到SC++ L。然而,大多數我知道的編譯器都帶有hash_map
,但明顯增加了unordered_map
,直到C++ 0x在所有編譯器中都可用,所以您應該能夠毫無困難地使用它。
我相信你正在尋找map
。有關更多信息,請參閱here。
該STL std::map
可以用來建立一個字典。 std::map
通常實現爲搜索樹,而不是哈希表。這意味着查找和插入都具有不同於C#的HashMap
的性能特徵 - 對於非常大的地圖,平均查找速度會更慢,尤其是如果地圖中的對象在內存中分段存儲時。
在新的C++標準的TR1中,您有std::tr1::unordered_map
和std::tr1::unordered_multimap
,這通常會使用散列表來實現。如果您的編譯器不提供這些庫,則可以使用http://www.boost.org/中的實現。
另一種選擇是Google的sparse_hash
。
在std :: map中查找**不是**本身比在hash_map中慢。只有hash_map的漸近性能是O(1)對O(log n),但對於足夠大的值1,log n可能會更快。即使在實際情況下,情況往往也是如此,尋找一個好的散列函數比實現一個正確的運算符要困難得多。 – gimpf 2010-04-27 13:08:47
只要重新閱讀,你說的_often_,並不總是我的錯。然而,_often_意味着大多數人使用正確的散列函數來使用字典,超過1000個條目。根據公司內部的工作領域和技能水平,這可能確實不太可能。 – gimpf 2010-04-27 13:10:24
也許'經常會變慢'有點苛刻。我的觀點主要是他們有不同的表現特徵。 – gnud 2010-04-27 13:11:19
- 1. C++ HashTable對象實現
- 2. HashTable中的空對象
- 3. C#在字典中的多個對象
- 4. Ruby中的字典對象
- 5. 字典對象
- 6. 對象工廠字典在C++
- 7. C#對象作爲字典鍵問題
- 8. C#字典 - 自定義對象
- 9. Python對象持有對象的字典()
- 10. pyyaml地圖字典爲對象字典
- 11. 排序的字典對象
- 12. 空的Hashtable對象有多大
- 13. 如何從Hashtable中獲取DictionaryEntry對象?
- 14. 字典對象不能轉換成JSON對象objective-c
- 15. Python中的字典對象的聯合
- 16. 如何獲取字典C#中的對象鍵的支持?
- 17. 獲取字典中的對象內的屬性 - 目標C
- 18. C#從Hashtable中獲取對象或引用
- 19. python在字典中的對象
- 20. C#詞典中的字典
- 21. 如果值是某物,更新c#字典對象中的值
- 22. 如何添加一個對象到字典中的c#
- 23. c#使用類對象作爲字典中的鍵
- 24. 嵌套字典對象
- 25. 問題與字典對象
- 26. 顯示字典對象
- 27. 嵌套字典對象?
- 28. python字典對象vs值
- 29. 製作字典對象
- 30. 訪問對象爲字典
C++沒有像hash_map這樣的容器,並且不會在C++ 0x中。 C++中哈希表的名稱是unordered_map - se http://publib.boulder.ibm.com/infocenter/comphelp/v9v111/topic/com.ibm.xlcpp9.aix.doc/standlib/stl_unordered_map.htm – 2010-04-27 13:03:48
是的,我更新了我的答案一點... – 2010-04-27 13:05:22
啊,C++標準過程。在羅馬燒傷的時候,討論哈希表類的名字。 – stusmith 2010-04-27 13:08:22