gpt4 book ai didi

c++ - 从 unordered_multimap 中删除元素

转载 作者:行者123 更新时间:2023-11-30 02:35:14 24 4
gpt4 key购买 nike

我有一个 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 的返回值作为新的迭代器。

关于c++ - 从 unordered_multimap 中删除元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33830660/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com