2010-04-27 70 views

回答

11

其實是完全一樣的.NET的詞典/哈希表,你要的是hash_mapunordered_mapstd::map實現爲二叉樹),hash_map是一個擴展到SC++ L。然而,大多數我知道的編譯器都帶有hash_map,但明顯增加了unordered_map,直到C++ 0x在所有編譯器中都可用,所以您應該能夠毫無困難地使用它。

+1

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

+0

是的,我更新了我的答案一點... – 2010-04-27 13:05:22

+5

啊,C++標準過程。在羅馬燒傷的時候,討論哈希表類的名字。 – stusmith 2010-04-27 13:08:22

2

我相信你正在尋找map。有關更多信息,請參閱here

5

STL有std::map        

+1

地圖是一棵平衡樹,而不是散列容器。 – Joe 2010-04-27 13:28:23

+0

@joe - 問題在於C++ STL中的hashmap *或* dictionary類,所以'std :: map'符合法案。 – gnud 2010-04-27 21:51:09

+1

@gnud:OP也表示「它具有與C#中的功能相似的功能」,如果您正在討論性能特徵,則僅適用於unordered_map。 – Joe 2010-04-28 00:01:28

3

該STL std::map可以用來建立一個字典。 std::map通常實現爲搜索樹,而不是哈希表。這意味着查找和插入都具有不同於C#的HashMap的性能特徵 - 對於非常大的地圖,平均查找速度會更慢,尤其是如果地圖中的對象在內存中分段存儲時。

在新的C++標準的TR1中,您有std::tr1::unordered_mapstd::tr1::unordered_multimap,這通常會使用散列表來實現。如果您的編譯器不提供這些庫,則可以使用http://www.boost.org/中的實現。

另一種選擇是Google的sparse_hash

+0

在std :: map中查找**不是**本身比在hash_map中慢。只有hash_map的漸近性能是O(1)對O(log n),但對於足夠大的值1,log n可能會更快。即使在實際情況下,情況往往也是如此,尋找一個好的散列函數比實現一個正確的運算符要困難得多。 – gimpf 2010-04-27 13:08:47

+0

只要重新閱讀,你說的_often_,並不總是我的錯。然而,_often_意味着大多數人使用正確的散列函數來使用字典,超過1000個條目。根據公司內部的工作領域和技能水平,這可能確實不太可能。 – gimpf 2010-04-27 13:10:24

+0

也許'經常會變慢'有點苛刻。我的觀點主要是他們有不同的表現特徵。 – gnud 2010-04-27 13:11:19