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

时间:2016-03-02 11:40:35

标签: c++ multimap

我已经阅读了很多内容,但却找不到任何答案。我有一个多图,其中包含<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

1 个答案:

答案 0 :(得分:0)

itit=mymap.erase(it)增加auto it=ret.first; if (it!=ret.second) { ++it; while (it!=ret.second) it=mymap.erase(it); } 并不适合我。

你应该这样做

embeds_in :character_classes