У меня проблема с ошибкой «map/set iterator not incrementable», связанной с моим мультимапом. Я пробовал искать ответы, но ответы мне не помогли. Я предполагаю, что проблема в том, что первая часть моего кода выполняет «Akcja» команду, которая может (но не обязана) удалить один из компонентов Multimap:C++ map/set iterator not incrementable error при использовании multimap
while ((c = getch()) != 27)
{
if (c == 'n')
{
typedef multimap<int, Organizm*>::iterator iterator;
for (int i = 10; i>= 0; i--)
{
std::pair<iterator, iterator> iterpair = kolejnoscRuchu.equal_range(i);
iterator it = iterpair.first;
for (; it != iterpair.second; ++it)
{
if(it->second->inicjatywa !=0)
{
it->second->akcja();
}
}
}
}
Если определенные условия выполнены в Akcja() вызовет команду, которая удаляет элемент:
void Swiat::usunOrganizm(Organizm *organizm)
{
this->organizmy[organizm->pozycja.x][organizm->pozycja.y] = NULL;
typedef multimap<int, Organizm*>::iterator iterator;
std::pair<iterator, iterator> iterpair2 = this->kolejnoscRuchu.equal_range(organizm->inicjatywa);
iterator it2 = iterpair2.first;
for (; it2 != iterpair2.second; ++it2)
{
if (it2->second == organizm)
{
cout << "usuwam " << it2->second->rysowanie() << endl;
kolejnoscRuchu.erase(it2);
delete organizm;
break;
}
}
}
Я добавил «COUT < < "usuwam" < < it2-> второго> rysowanie() < < endl; " чтобы подтвердить, возникает ли ошибка после удаления каких-либо элементов из моего мультимапа. Буду признателен за любую помощь
Спасибо, но я не уверен, если это решение будет всегда помогать мне. В основном в моем примере у меня есть 2 итератора, потому что мой мультимап - это контейнер организмов с их соответствующими инициативами со значениями от 0 до 10. Когда организм движется, он может сражаться с другим организмом, и если произойдет драка, один из них умрет - отсюда и второй итератор. Ваше решение позволяет мне повторять второй цикл, но что, если я удалю первый итератор во время функции «usunOrganizm»? –
@LKaniewski: ОК, добавлено другое возможное решение. – rici