Cru>почему неполучается удалить все данные из малтимапа с помочью перврго способа? что не так?
Насколько я понимаю, после удаления элемента из мультимепа первым способом все последующие итераторы становятся невалидными, а во втором ты их удаляешь по индексу, так можно.
Вообще, если тебе нужно удаление элементов, можно написать свой предикат и удалять через
Здравствуйте, Cru, Вы писали:
Cru> for(it = mmap.begin(); it != mmap.end(); it++) mmap.erase(it->first);
Cru>почему неполучается удалить все данные из малтимапа с помочью перврго способа? что не так? Cru>зарание благодарен...
итератор it при удалении становится невалидным, правильнее так:
for(it = mmap.begin(); it != mmap.end(); ) it = mmap.erase(it);
SNN>Насколько я понимаю, после удаления элемента из мультимепа первым способом все последующие итераторы становятся невалидными,
Неправильно. Невалидным становится только итератор, соответствовавший удаленному элементу. В первом варианте
for(it = mmap.begin(); it != mmap.end(); it++) mmap.erase(it->first);
соответсвенно проблема была в том, что it++ в цикле выполнялся для испорченного итератора
SNN>а во втором ты их удаляешь по индексу, так можно.
Если быть точным, то по ключу, а не по индексу.
SNN>Вообще, если тебе нужно удаление элементов, можно написать свой предикат и удалять через
SNN>
Здравствуйте, dkon, Вы писали:
Cru>> for(it = mmap.begin(); it != mmap.end(); it++) mmap.erase(it->first); Cru>>почему неполучается удалить все данные из малтимапа с помочью перврго способа? что не так? Cru>>зарание благодарен...
D>итератор it при удалении становится невалидным, правильнее так: D>for(it = mmap.begin(); it != mmap.end(); ) it = mmap.erase(it);
Для некоторых контейнеров это действительно так.
Для мультимэпы неверно. Есть три перегруженных метода erase, но ни один из них не возвращает итератор :)
void erase(iterator pos) Associative Container Erases the element pointed to by pos.
size_type erase(const key_type& k) Associative Container Erases the element whose key is k.
void erase(iterator first, iterator last) Associative Container Erases all elements in a range.
Да, ты прав, не получается сделать такое на multimap. Я такое делал обычно на векторах, а на multimap не проверил.
В общем подумаю, может получится перегрузить его.