Я пытаюсь выяснить, как работают итераторы 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
}
}