我正在使用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
作为顶点列表。
这是什么原因,我该如何解决?
答案 0 :(得分:2)
对于vectorS
,描述符和迭代器一样不稳定:它们在插入/移除时失效。见Iterator and Descriptor Stability/Invalidation
当然,那里描述的解决方案(使用listS
)可能不适用于您的情况。
在这种情况下,请重新考虑您的问题,并考虑过滤图形(不实际删除顶点)或将顶点标记为已删除。看到这里寻找灵感: