2009-12-16 54 views
0

我需要一個類似C++ std :: map的類。更具體地說,我需要這樣的行爲:
map< string, vector<int> > my_map;
這可能嗎?是否有任何通用的HashTable?

+4

你需要用什麼語言? – 2009-12-16 13:25:54

+2

@gf-我相信他是爲C#拍攝的 – TStamper 2009-12-16 13:27:46

+0

我相信你的意思是std: :multimap KitsuneYMG 2009-12-16 13:31:30

回答

12

字典是我相信你想要的東西:

Dictionary<String, int> dict = new Dictionary<String, int>(); 

dict.Add("key", 0); 
Console.WriteLine(dict["key"]); 

等,等

MSDN:http://msdn.microsoft.com/en-us/library/xfhwa508.aspx

您可以指定更多或更少的任何類型的鍵/值類型。包括另一個字典,一個數組或其他:

Dictionary<String, String[]> dict = new Dictionary<String, String[]>(); 

因此,這裏Dictionary中的每個元素指向一個字符串數組。

要實現您所需要的(與向量INT),您將需要一個列表作爲值類型:

Dictionary<String, List<int>> dict = new Dictionary<String, List<int>>(); 

值得一提的是一個字典沒有預定義的順序,而性病::地圖確實。如果順序很重要,您可能希望使用SortedDictionary,這在用法上幾乎相同,但按鍵排序。如果你打算真的迭代字典,這一切都取決於。

但是請注意,如果您使用您創建的類作爲鍵,您將需要正確覆蓋GetHashCode和Equals。

0

是的,你在問題中寫的聲明是正確的。它將一個字符串映射到一個整數矢量上。然而,std :: map由紅黑樹實現支持,而你的問題表明你需要一個散列表。如果你可以使用boost,你可以嘗試執行unordered_map。這是tr1規範的一部分,並將映射實現爲散列表。標準類型的散列函數已經在boost中實現,所以你不需要擔心這一點。

#include <boost/unordered_map.hpp> 
... 
boost::unordered_map<std::string, std::vector<int> > my_map; 
+1

我相信這個問題需要一個C#等價物,而不是C++代碼是否準確 – Kazar 2009-12-16 13:26:22

+0

我沒有看到問題中的C#標記。你可以讓它更清楚一點,你是在一個c#相當於std :: map! – 2009-12-16 13:26:31

+0

我沒有問這個問題,但我已經編輯了這個問題來澄清(假設我對這個問題的假設是正確的)。 – Kazar 2009-12-16 13:28:36

1

這取決於你真正需要什麼。 因爲已經說過你使用System.Collections.Generic.Dictionary<Key, Value>查找行爲,所以相當於std::map<string, std::vector<int> >會(使用System.Collections.Generic.List<int>爲vectorequivalent):

Dictionary<string, List<int>> myDictionary = new Dictionary<string, List<int>>(); 
myDictionary.Add("a", new List<int>()); 

等 內部字典使用Hashtable的,而性病::地圖使用紅黑樹,所以std :: map是有序的,而Dictionary是無序的。如果你需要一個有序的字典(這將更接近std :: map,你可以使用System.Collections.Generic.SortedDictionary<Key, Value>。它的用法大致相同,它的用法大致與字典

0

相同如果你的目標是要替換map,那麼你想'SortedDictionary' ,因爲那也實現了紅黑樹,如果你想要一個哈希表,那麼Dictionary就可以工作了

相關問題