Хотелось бы итерации по карте, но внутренний цикл просто переходил бы через верхнюю часть элементов. с вектором это будет выглядеть так:C++: двойная итерация по карте
for(auto element1 = myVector.begin() ; element1 != myVector.end() ; ++element1){
for(auto element2 = element1 + 1; element2 != myVector.end() ; ++element2){
//my stuff
}
}
Но с картой element1 + 1
возвращает ошибку no operator matches this operand
.. Я считаю, что исходит из того, что элемент не заказанные на карте.
Итак, как я мог правильно это сделать? Я в настоящее время использую этот грязный обходной путь, который требует испытания в каждом цикле:
for(auto element1 = myMap.begin() ; element1 != myMap.end() ; ++element1){
for(auto element2 = element1; element2 != myMap.end() ; ++element2){
if(element->first != element2->first)
//my stuff
}
}
@Pixelchemist: Правильно, я не могу читать –
Элементы в 'карте' упорядочены ключом. Причина 'element1 + 1' не может быть использована потому, что итераторы, связанные с картой, не являются итераторами произвольного доступа. Вы можете увеличивать их, но вы не можете добавить к ним 1. –