使用 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);
}
我已经阅读了很多,但找不到这个问题的任何答案。我有一个多图,其中包含成对的 <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);
}