2013-10-06 2 views
0

Я планирую использовать карту с двумя ключами для моего задания. И я создаю свою карту, как следующее:карта с двумя ключами в C++

map<pair<string, string>, int> myMap; 
map<pair<string, string>, int>:: iterator it; 

У меня было трудное время, как использовать map.find() и map.insert() для нахождения существующей записи в карте или вставить новое значение, если два ключа комбинация новая. Может ли кто-нибудь привести пример?

+1

Проходите 'find' соответствующий' pair', например, 'map.find (make_pair ("Foo", "Бар"))'. В этом нет ничего особенного. – Jon

+1

@ DanielFrey, похоже, работает на ideone: http://ideone.com/yHxxN5 – us2012

+0

Это быстро! спасибо, как насчет map.insert(), в одной ключевой карте, я могу сделать map.insert (пара («foo», 10)), не уверен в двух ключах. – Vortex

ответ

2

Он должен быть таким же, как с любой картой, за исключением того, что вы должны делать пары для своего ключа.

Вставка:

map< pair<string,string>, int > mymap; 

pair<string, string> key = make_pair("bob", "sue"); 
mymap[ key ] = 5; // you can inline make_pair if you prefer. 

// or you can use insert method 
mymap.insert(key, 5); 

Поиск:

pair<string, string> key = make_pair("bob", "sue"); 
auto it = mymap.find(key); // you can inline make_pair if you prefer. 
if (it != mymap.end()) 
{ 
    cout << it->second; 
} 

Обратите внимание, что при использовании строки в качестве ключа в карте могут иметь проблемы с производительностью. Кроме того, порядок строк в паре имеет значение.

+0

Мне нравится этот, очень чистый и ясный! – Vortex

1
it = myMap.find(make_pair("hi","mike")); 

insert немного неудобно, потому что вы вставляя пару, первый компонент также пара:

myMap.insert(make_pair(make_pair("hi","john"), 4)); 
+0

Спасибо! very helpfull – Vortex

0

Это работает:

typedef pair<string, string> key_type; 
map<key_type, int> myMap; 
myMap.insert(std::make_pair(key_type("a","b"),1)); 
map<pair<string, string>, int>::iterator it; 
it = myMap.find(key_type("a","b")); 

insert можно заменить emplace в C++ 11, чтобы сократить код:

myMap.emplace(key_type("a","b"),1); 
+0

Спасибо !!!!! очень полезно – Vortex

Смежные вопросы