Ссылка на значение из вложенной пары на карте

У меня есть карта, которая содержит int и вложенную пару из двух строк:

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

У меня также есть вектор строк.

vector<string> returned;

И два итератора, которые их сопровождают:

vector<string> returned::iterator it2;
map<int, pair<string, string> >::iterator it3;

Я пытаюсь получить доступ к первой строке пары, которая вложена в карту, чтобы сравнить ее с текущей строкой вектора «возвращено». Я использую два итератора для этого. Тем не менее, я не могу получить доступ к первой строке вложенной пары.

//PUT BACK BORROWED BOOKS
for (it2 = returned.begin(); it2 != returned.end(); it2++){
//SEARCH FOR POSITION OF BOOK
for (it3 = books.begin(); it3 != books.end(); it3++){
//PROBLEM IN LINE BELOW
if(it2 == (it3->second-> first))
int bookPos = it3 -> first;}
}

Кто-нибудь знает, как ссылаться на эту первую строку в паре? Очевидно, что «это-> второе-> первое» не является решением.

Заранее спасибо.

5

Решение

Есть две ошибки. it3->second не является итератором. Также, как упоминалось в комментариях, вы сравниваете it2 (итератор) со строкой. Строка с ошибкой должна выглядеть так:

if(*it2 == (it3->second.first))
3

Другие решения

Карты также делают хорошие таблицы поиска. Ключ карты соответствует двум значениям, представленным парой. В приведенном ниже примере показано, как получить доступ к значению ключа и пары.

int main()
{
typedef map<string, pair<int, int> > op_type;
op_type op = {
{"addu", make_pair(33, 1) }
};

vector<string> this_line;

op_type::const_iterator i = op.find(this_line[0]);
if( i != op.end() )
{
cout << "key: " << i-first << endl;
cout << ".first value in pair " << i->second.first << endl;
cout << ".second value in pair " << i->second.second << endl;
}
}

Печать:
ключ: адду
Первое значение в паре 33
второе значение в паре 1

0

По вопросам рекламы [email protected]