Итератор после удаления 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++; 
 }
→ Ссылка