正在从无序多重映射中删除元素
Removing elements from an unordered_multimap
我有一个表示邻接列表的无序多映射,以及几个具有自循环的边。例如:
edges_可能是:
edges_.insert(Edges::value_type(1, std::make_pair(1, 0.0)));
edges_.insert(Edges::value_type(1, std::make_pair(1, 0.0)));
edges_.insert(Edges::value_type(1, std::make_pair(1, 0.0)));
edges_.insert(Edges::value_type(1, std::make_pair(2, 0.0)));
我想删除3个重复的(1,(1,0.0))值。如果我在edges_erase(it)行之后断开,则只删除三个重复行中的一个。
如果我在迭代中前进,不管我是否递增迭代器,它似乎在那之后崩溃了。如何删除这三个?
template <typename T_NodeLabel, typename T_EdgeWeight>
class Graph
{
public:
using NodeId = unsigned int;
using Nodes = std::unordered_map<NodeId, T_NodeLabel>;
using AdjacencyList = std::pair<NodeId, T_EdgeWeight>;
using Edges = std::unordered_multimap<NodeId, AdjacencyList>;
void RemoveSelfLoops(NodeId node)
{
auto edges = edges_.equal_range(node);
for (auto it = edges.first; it != edges.second;)
{
if (it->second.first == node)
{
edges_.erase(it);
}
else
{
++it;
}
}
}
private:
Nodes nodes_;
Edges edges_;
};
调用erase
后,迭代器无效。然后你试着在下一次迭代中使用它。
您需要使用返回值erase
作为新的迭代器。
相关文章:
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 如何从多映射中删除特定的重复项
- 如何从存储在std::映射中的std::集中删除元素
- 从嵌套在std::映射中的std::列表中删除元素的最佳方式
- 删除映射和分割错误中的一个过去结束元素
- C++映射不删除元素
- c++:复制、删除和运算符=在原始指针映射中
- 当覆盖映射中的复杂对象键时,旧对象将被删除(C++)
- 删除 std::函数映射
- c++ 在循环中删除迭代器(映射的映射)
- 如何在多映射 c++ 中删除重复值?
- 在 c++ stl 映射中,删除具有重复值的条目
- 使用有序映射删除共享指针
- 遍历 STL 映射(集/多集)的最佳方法,同时元素可能会在循环期间被删除并重新插入?
- 删除映射中的指针会导致内存错误
- 静态映射中动态分配的对象.删除必要的
- 删除多重映射中的重复键
- 删除C++STL多映射中特定键的条目
- C 将HEAP对象插入std ::用insert()插入映射,而另一个则存在删除新的对象
- 映射内的c++映射-删除指针