Недействительность итератора multitimap C ++

Я пытаюсь выяснить, как работают итераторы std :: multimap , поэтому я создал простой пример, показывающий суть моей проблемы. Если раскомментировать случай 1, я ожидаю, что итератор укажет на первый элемент с ключом 1, но на самом деле он печатает все значения, связанные с ключом 0 (как будто ничего не было стерто), и иногда он дает сбой, вероятно, потому, что итератор недействителен. Однако если раскомментировать случай 2, все значения с ключом 1 будут правильно удалены.

Есть ли способ узнать, какой следующий действительный итератор для multimap после стирания? (например, std :: vector.erase (...) возвращает единицу)

std::multimap<int, int> m;

for(int j=0; j<3; ++j) {
    for(int i=0; i<5; ++i) {
        m.insert(std::make_pair(j, i));
    }
}

for(std::multimap<int, int>::iterator it=m.begin(); it!=m.end();) {
    printf("%d %d\n", (*it).first, (*it).second);
    ++it;
    if( (*it).second == 3 ) {
        //m.erase(0);     //case 1
        m.erase(1);     //case 2
    }
}
5
задан Björn Pollex 23 December 2011 в 09:10
поделиться