Намагаюся перевірити, чи є даний ключ в карті, і щось не виходить:
typedef map<string,string>::iterator mi;
map<string, string> m;
m.insert(make_pair("f","++--"));
pair<mi,mi> p = m.equal_range("f");//I'm not sure if equal_range does what I want
cout << p.first;//I'm getting error here
так як же мені вивести те, що знаходиться в p?
Можна використовувати .find()
:
map<string,string>::iterator i = m.find("f");
if (i == m.end()) { /* Not found */ }
else { /* Found, i->first is f, i->second is ++-- */ }
Думаю, вам потрібно map::find
. Якщо m.find("f")
дорівнює m.end()
, то ключ не знайдено. В іншому випадку find повертає ітератор, що вказує на знайдений елемент.
Помилка пов'язана з тим, що p.first
- це ітератор, який не працює для вставки потоку. Змініть останній рядок на cout << (p.first)->first;
. Тут p
- пара ітераторів, p.first
- ітератор, p.first->first
- ключовий рядок.
Карта може мати тільки один елемент для заданого ключа, тому equal_range
не дуже корисний. Він визначений для map, тому що він визначений для всіх асоціативних контейнерів, але він набагато цікавіший для multimap.