Стирание итератора 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);

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

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector