我在使用std::multimap
容器时遇到了一些困难,希望知道实现我的目标的正确方法。基本上,以下是我的SSCCE:
#include <iostream>
#include <map>
int main ()
{
typedef std::multimap<int, int> CollectionType;
typedef std::pair<CollectionType::iterator, CollectionType::iterator> RangeType;
CollectionType multiMap;
multiMap.insert(std::make_pair(1, 1));
multiMap.insert(std::make_pair(1, 2));
multiMap.insert(std::make_pair(2, 3));
multiMap.insert(std::make_pair(2, 4));
multiMap.insert(std::make_pair(2, 5));
multiMap.insert(std::make_pair(3, 1));
RangeType range = multiMap.equal_range(2);
for (CollectionType::iterator iterator = range.first; iterator != range.second; ++iterator)
{
if (iterator->second == 4)
{
//multiMap.erase(iterator);//ISSUE 1
}
else
{
//iterator->first = -1;//ISSUE 2
}
}
return 0;
}
如上所述,我需要选择给定键的
multimap
范围,然后:
- 我需要从范围中删除某些行
- 我需要更改范围中其他行的键
关于第二点,由于"笨拙"的方法不会(显然)奏效,那么实现我需要的东西的好方法是什么?一旦解决问题1,我可以删除元素并插入新元素替代它们,但如果我错误地插入了一个与刚才删除的相同键的项目,那么这样做是否会弄乱迭代?...
int second = iterator->second;
localEdges.smarter_erase(iterator);
localEdges.insert(std::make_pair(-1, second));