使用 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);
}
相关文章:
- 如何使用"equal to"以外的评估编写开关语句
- 为什么我的向量::擦除调用会抛出"vector subscript out of range"?
- C++ 向量加减抛出"expression: vector subscript out of range."错误
- 使用 range-v3 读取包含逗号分隔数据的行
- 迭代的"range-based for"召唤
- 如何解决'vector subscript out of range'错误?
- 如何检查 range:: 算法(如 find_if)是否返回了值?
- C++有"not equal compare and exchange"或"fetch add on not equal"吗?
- 在 std::unordered_map 中插入新的键/值对会导致"out of range"异常
- "[ptr, ptr+len) must be a valid range"是什么意思?
- c++ 中的 range-for 会调用项的复制构造函数吗?
- 如何创建一个版本的 boost::range::transform,该版本具有用于捕获上下文的额外参数
- 如何使用 range-v3 获取集合的所有权?
- 为什么 std::equal 模板由两个类参数化?
- QList::operator[]中的断言失败<T>:QJoysticks 中的"index out of range"
- 尝试获取矩阵的正确对角线会导致"vector out of range"错误
- 叮叮当当的'range-loop-analysis'诊断是关于什么的?
- Boost Range适配器制作集合
- std::remove, std::move(range) and moved-from elements
- C++20概念中的"equal"概念