使用 equal_range() 和 erase() 擦除多图中除一对以外的所有对

Erasing all but one pairs in a multimap, using equal_range() and erase()

我已经阅读了很多,但找不到这个问题的任何答案。我有一个多图,其中包含成对的 <Class object, enum class> 并使用 std::multimap.equal_range() 我正在获取其中所有重复键的范围。下一步是我想删除除其中一个以外的所有重复项。我的以下代码删除了所有这些,不留下任何与给定密钥的对。无论如何,我可以简单地删除其中一个以外的所有内容吗?

void removeDuplicates( const string& strToRemove ) {
        CFile obj (strToRemove, 0);       
            pair <multimap<CFile,Filetype>::iterator, multimap<CFile,Filetype>::iterator> ret;
            ret = m_DirectoryMap.equal_range(obj);
            for (multimap<CFile,Filetype>::iterator it=ret.first; it!=ret.second; ++it) {
                it = m_DirectoryMap.erase(it);

            }
}

就像我提到的,如果我有 3 对具有相同密钥的代码,则它们都会被删除。我想删除 n-1 重复项,而不是 n.

it=mymap.erase(it) 之后递增 it 我觉得不对。

你应该这样做

auto it=ret.first;
if (it!=ret.second)
{
    ++it;
    while (it!=ret.second)
        it=mymap.erase(it);
}