1

我有一对迭代器:

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 个对象 - 这是我的目标。后来我发现我可能应该尝试通过 1 个函数调用来擦除整个对,并且应该不需要任何循环,如下所示:

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

这看起来更干净,但问题是它会删除所有对象。

然后我尝试了:

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

这似乎留下了第一个对象并删除了其余的对象,所以它对我有用,但我的问题是 - 这是正确的方法吗,我在寻找什么?

4

0 回答 0