我是一個很大的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++中有什麼區別?
回答
您是否看過維基百科的頁面associative containers in C++?
如果您想要真正的哈希表(使用提供哈希碼的密鑰,但鍵之間沒有順序),您可以使用C++ 2011 std::unordered_map模板。在這方面,你需要一個最近足夠支持C++ 11的編譯器。
如果您可以提供關鍵的訂單,也可以考慮使用std::map,即使在早期的C++ 03標準中也可以使用。
如果訂單無關緊要怎麼辦?我的意思是,我所需要的僅僅是一個鍵值對集合,它可以存儲鍵值對,並在需要時檢索給定鍵的值。 – volatNumbers 2012-02-25 15:43:52
如果僅限於C++ 03(不是C++ 11,而不是TR1,不是boost),那麼將值與鍵關聯的最簡單方法是對該鍵類型提供一些順序並使用'std :: map' 。該命令可能對您而言並不重要,但可能很容易提供。 – 2012-02-25 15:47:24
如何提供訂單?任何參考請.. – volatNumbers 2012-02-25 15:57:39
unordered_map
相當於java的HashMap
,它是一個哈希映射 - 所以它可能是你以後的樣子。
map
相當於java中的TreeMap
。它被實施爲red-black tree。
unordered_set
相當於java的HashSet
。它只包含密鑰,而不包含(key,value)
- 1. 這些POST命令有什麼區別?
- 2. 這些CIL語句有什麼區別?
- 3. 這些功能有什麼區別?
- 4. 這些選擇器有什麼區別?
- 5. 這些NGINX模塊有什麼區別?
- 6. 這些字符有什麼區別?
- 7. 這些GAE庫有什麼區別?
- 8. 這些PHP變量有什麼區別?
- 9. 這些os.popen調用有什麼區別?
- 10. 這些授權API有什麼區別?
- 11. 這些LINQ查詢有什麼區別?
- 12. 這些意圖有什麼區別?
- 13. 這些查詢有什麼區別?
- 14. 這些代碼有什麼區別?
- 15. 這些#import聲明有什麼區別?
- 16. 這些np.linalg.norm方法有什麼區別
- 17. Objective c中這些@properties有什麼區別?
- 18. 這些C函數參數類型有什麼區別?
- 19. 這些Objective C方法樣式有什麼區別?
- 20. 這些C#代碼段(Outlook插件)有什麼區別?
- 21. 在這些例子中調用'this'有什麼區別?
- 22. 在swift中聲明這些變量時有什麼區別!或()
- 23. 在java中使用這些字符串有什麼區別嗎?
- 24. printf中%c和%C有什麼區別?
- 25. 這兩個聲明在c中有什麼區別?
- 26. 在C++中const的這兩個用法有什麼區別?
- 27. 這些聲明(JavaScript中)有什麼區別?
- 28. C++中#import和#include有什麼區別?
- 29. C中#define和'='有什麼區別?
- 30. C#中CLR和DLR有什麼區別?
即使是半感興趣的第二眼也應該向您透露'unordered_map/set'是一個散列容器。它是C++ 11,Boost和TR1的一部分,其中的任何一個都應該做到這一點。 – 2012-02-25 15:31:56