2013-04-29 43 views
3
map <pair<unsigned int, unsigned int>, unsigned int> kmapValues; 

如何將C++中的make_pair翻譯成c#?

private Dictionary<KeyValuePair<uint, uint>, uint> kmapValues; 

取代

kmapValues[make_pair(j, i)] = 1 

kmapValues[Tuple(j, i)] = 1 // got error 

System.Tuple是類型,但象一個可變錯誤使用

回答

3

您正在聲明一個使用KeyValuePair<K,V>鍵的字典,但您正嘗試使用Tuple<T1,T2>來代替它。你需要決定一種類型,並留下來。

由於KeyValuePair<K,V>是不對稱的,我會用Tuple<T1,T2>

private Dictionary<Tuple<uint, uint>, uint> kmapValues; 

那麼你的任務將正常工作:

kmapValues[Tuple.Create(j, i)] = 1; 
+0

其實你需要'Tuple.Create',它與'make_pair'接近和C#中的一樣。或'新元組(...)',但這是笨拙的。 – Jon 2013-04-29 10:24:15

+0

@Jon很好的建議,非常感謝! 'Tuple.Create'確實更接近C++的'make_pair'。 – dasblinkenlight 2013-04-29 10:25:57

+0

編譯後無法創建靜態類「System.Tuple」的實例 – Martin 2013-04-29 10:26:02

1

//作爲一個C#擴展方法,對一些靜態類:

public static KeyValuePair<K, V> MakePair<K, V>(this K k, V v) { return new KeyValuePair<K, V>(k, v); }