私はブーストgraph_traitsを使用して、このようなグラフを定義している:::のadjacency_listグラフ
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;
は今、私は1つの頂点(頂点のリスト)に各クラスタをマージしようとしました。私はまだ重複が残っていることに気づいしかし
boost::clear_vertex(v, graph)
boost::remove_vertex(v, graph);
:これを行うには、私は、クラスタclusters[i]
の各頂点のために呼び出します。私はそれが削除中にインデックスの変更に関連していると思います。これは、頂点リストにvecS
を使用しています。
これはどのような理由があり、どのように解決できますか?
が降順に削除しての除去として(安全に彼らにこの方法を削除する頂点のリストをソートすることは可能ですインデックスiは、std :: vectorのインデックス> iにのみ影響します)? – Chris
原則として、はい。しかし、私は文書化された安定性/失効保証に固執します。また、remove_vertex()は、VertexList = vecSのadjacency_listで使用すると、グラフのすべてのイテレータと記述子を無効にします。 – sehe
私はそれをテストし、期待どおりに動作しませんでした。おそらく、それが内部的にどのように動作するかに関する私の仮定は間違っていたでしょう。今度はfiltered_graphを使用しようとしましたが、adjacency_listに変換するのに問題がありました。 – Chris