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

сКак перевести make_pair в C++ на 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' e как и в C#. Или 'new Tuple (...)', но это громоздко. – Jon

+0

@ Jon Отличное предложение, большое спасибо! 'Tuple.Create' действительно намного ближе к' make_pair' C++. – dasblinkenlight

+0

не может создать экземпляр статического класса «System.Tuple» после компиляции – Martin

1

// Как метод расширения C#, на некотором статическом классе:

public static KeyValuePair<K, V> MakePair<K, V>(this K k, V v) { return new KeyValuePair<K, V>(k, v); } 
Смежные вопросы