15
A
回答
14
如果我理解正确,这些值可以出现在任何键下。如果是这种情况,你必须迭代你的multimap并擦除特定的值。
typedef std::multimap<std::string, int> Multimap;
Multimap data;
for (Multimap::iterator iter = data.begin(); iter != data.end();)
{
// you have to do this because iterators are invalidated
Multimap::iterator erase_iter = iter++;
// removes all even values
if (erase_iter->second % 2 == 0)
data.erase(erase_iter);
}
1
由于C++ 11,std::multimap::erase返回最后删除的元素下面的迭代器。
所以,你可以稍微更干净改写尼古拉的回答,而不需要介绍当地erase_iter变量:
typedef std::multimap<std::string, int> Multimap;
Multimap data;
for (Multimap::iterator iter = data.begin(); iter != data.end();)
{
// removes all even values
if (iter->second % 2 == 0)
iter = data.erase(iter);
else
++iter;
}
(参见回答this question)
相关问题
- 1. 如何优化从multimap擦除
- 2. Multimap之擦除不起作用
- 3. 擦除和删除图像
- 4. 擦除删除成语在嵌套容器中删除? (删除外部的; C++ STL)
- 5. 根据键值擦除multimap中的元素?
- 6. 擦除价值
- 7. C++ STL矢量深度擦除
- 8. 删除()STL多继承
- 9. STL从列表中删除
- 10. 并发multimap放入和删除
- 11. 发现和擦除重复和擦除值在另一矢量
- 12. 与NA擦除重复值
- 13. 奇怪擦除
- 14. 擦除元素
- 15. 通过擦除
- 16. 擦除详细?
- 17. STL multimap关联容器
- 18. 关于C++ STL列表类方法的擦除()
- 19. 什么是非无效STL擦除的安全等价物?
- 20. STL向量擦除后无效的迭代器
- 21. 执行remove_if()后擦除()
- 22. stl容器如何被删除?
- 23. lambda + for_each +在STL容器上删除
- 24. STL优先级队列 - 删除项目
- 25. STL列表中删除项目
- 26. 从硬盘安全地删除/擦除MySQL数据
- 27. 擦除表格视图单元格中的删除按钮
- 28. C++擦除 - 删除成语不能正常工作?
- 29. C++在for_each期间从擦除元素中删除元素
- 30. 如何在OpenGL中删除/擦除特定的多边形?
一个可能的修复可能是交换键和值,这可能不是所有阅读本文的选项,但可能适合一些阅读。 – dangerousdave 2012-10-12 11:07:05