У меня есть карта, которая содержит 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;}
}
Кто-нибудь знает, как ссылаться на эту первую строку в паре? Очевидно, что «это-> второе-> первое» не является решением.
Заранее спасибо.
Есть две ошибки. it3->second
не является итератором. Также, как упоминалось в комментариях, вы сравниваете it2 (итератор) со строкой. Строка с ошибкой должна выглядеть так:
if(*it2 == (it3->second.first))
Карты также делают хорошие таблицы поиска. Ключ карты соответствует двум значениям, представленным парой. В приведенном ниже примере показано, как получить доступ к значению ключа и пары.
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