从boost :: adjacency_list图中删除多个顶点

时间:2017-01-30 09:51:06

标签: c++ boost graph

我正在使用boost graph_traits并定义了这样的图表:

typedef boost::adjacency_list <boost::setS, boost::vecS, boost::undirectedS, NodeInfo, EdgeInfo> Graph;
typedef boost::graph_traits<Graph>::vertex_descriptor Vertex;

我的每个顶点都有坐标,我打算找到重复的顶点(同一位置的顶点)。所以我构建了一个包含这些“集群”的列表:

std::vector<std::vector<Vertex>> clusters;

现在我尝试将每个聚类合并到一个顶点(顶点列表)中。为此,我调用了集群clusters[i]的每个顶点:

boost::clear_vertex(v, graph)
boost::remove_vertex(v, graph);

但是我注意到仍然存在重复。我猜这与删除中的索引更改有关,因为我使用vecS作为顶点列表。

这是什么原因,我该如何解决?

1 个答案:

答案 0 :(得分:2)

对于vectorS,描述符和迭代器一样不稳定:它们在插入/移除时失效。见Iterator and Descriptor Stability/Invalidation

当然,那里描述的解决方案(使用listS)可能不适用于您的情况。

在这种情况下,请重新考虑您的问题,并考虑过滤图形(不实际删除顶点)或将顶点标记为已删除。看到这里寻找灵感: