Итератор после удаления erase
Подскажите пожалуйста, как действовать после применения метода .erase() к итератору ?
Вот у меня есть std::multimap и я в цикле перебираю все элементы, и если елемент соответствует определенному критерию, то удаляю его, но после удаления итератор становится недействительным, и я что то не могу сообразить, как продолжить цикл перебора начиная со следующего итератора, следующим за удаленным:
int main()
{
std::multimap<std::string, int>my_multimap;
my_multimap.emplace("string_1", 1);
my_multimap.emplace("string_2", 2);
my_multimap.emplace("string_3", 3);
my_multimap.emplace("string_4", 4);
std::multimap<std::string, int>::iterator iterator;
iterator = my_multimap.begin();
for (int i = 0; i < my_multimap.size(); i++)
{
if ((*iterator).first == "string_3")
{
my_multimap.erase(iterator);
}
iterator++; //После срабатывания .erase - тут будет ошибка.
}
}
Ответы (1 шт):
Автор решения: KoVadim
→ Ссылка
Начиная с с++11 erase возвращает итератор на следующий элемент.
1-2) (none) (until C++11)Iterator following the last removed element. (since C++11)
Соответственно, можно всегда написать вот так
if ((*iterator).first == "string_3") {
iterator = my_multimap.erase(iterator);
} else {
iterator++;
}