У меня есть пара итераторов:
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);
Кажется, это оставляет первый объект и удаляет остальное, поэтому он работает для меня, но мой вопрос — это правильный путь, то, что я ищу?
Задача ещё не решена.
Других решений пока нет …