2012-02-25 105 views
0

我是一個很大的java粉絲,但我現在必須在C++上爲一個項目工作。我打算給你一個java hashmap類的C++特性。谷歌搜索後,我發現在C++ STL庫中不存在hashmap/hashtable。但是我發現了這些數據類型:map,unordered_map,unorderd_set和hash_map。 hash_map是微軟的特定的dll /庫,其餘的都在STL下使用。我必須使用IBM XL C/C++編譯器。所以我不能使用微軟/提升,因爲我的公司不推薦他們。我必須使用特定的STL。請提供關於這些收藏的一些信息。如果我必須選擇hashmap功能,那麼在這些STL細節中最好是什麼?提前致謝。這些在C++中有什麼區別?

+6

即使是半感興趣的第二眼也應該向您透露'unordered_map/set'是一個散列容器。它是C++ 11,Boost和TR1的一部分,其中的任何一個都應該做到這一點。 – 2012-02-25 15:31:56

回答

1

您是否看過維基百科的頁面associative containers in C++

如果您想要真正的哈希表(使用提供哈希碼的密鑰,但鍵之間沒有順序),您可以使用C++ 2011 std::unordered_map模板。在這方面,你需要一個最近足夠支持C++ 11的編譯器。

如果您可以提供關鍵的訂單,也可以考慮使用std::map,即使在早期的C++ 03標準中也可以使用。

+0

如果訂單無關緊要怎麼辦?我的意思是,我所需要的僅僅是一個鍵值對集合,它可以存儲鍵值對,並在需要時檢索給定鍵的值。 – volatNumbers 2012-02-25 15:43:52

+1

如果僅限於C++ 03(不是C++ 11,而不是TR1,不是boost),那麼將值與鍵關聯的最簡單方法是對該鍵類型提供一些順序並使用'std :: map' 。該命令可能對您而言並不重要,但可能很容易提供。 – 2012-02-25 15:47:24

+0

如何提供訂單?任何參考請.. – volatNumbers 2012-02-25 15:57:39

4

unordered_map相當於java的HashMap,它是一個哈希映射 - 所以它可能是你以後的樣子。

map相當於java中的TreeMap。它被實施爲red-black tree

unordered_set相當於java的HashSet。它只包含密鑰,而不包含(key,value)