Стирание итератора equal_range

У меня есть пара итераторов:

pair <multimap<CFile,Filetype>::iterator, multimap<CFile,Filetype>::iterator> range;
range = m_DirectoryMap.equal_range(obj);

Эта пара содержит дублированные элементы в MultiMap - например, есть 1 объект, у которого есть еще 2 дубликата (таким образом, в основном 3 объекта), и мне нужно удалить 2 из них, поэтому остается только 1.

Я делал это с помощью простого цикла while, например:

auto it = range.first;
++it;
while (it != range.second)
        it = m_DirectoryMap.erase(it);

После этого остался только 1 объект - моя цель. Позже я обнаружил, что мне, вероятно, следует попытаться стереть всю пару с помощью одного вызова функции, и в циклах не должно быть необходимости, например:

m_DirectoryMap.erase(range.first, range.second);

Это кажется более чистым, но проблема в том, что он удаляет все объекты.

Тогда я попробовал:

m_DirectoryMap.erase(++range.first, range.second);

Кажется, это оставляет первый объект и удаляет остальное, поэтому он работает для меня, но мой вопрос - это правильный путь, то, что я ищу?

0 ответов

Другие вопросы по тегам