擦除equal_range迭代器

时间:2016-03-17 18:07:34

标签: c++ stl iterator 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 个答案:

没有答案