3

おそらく、boost のグラフ ライブラリのバグですが、助けていただけると助かります。

前の質問で示したように、グラフから頂点を削除して再度追加すると問題が発生します。

私の問題は少し異なります。boost::labeled_graphオブジェクト ポインターをラベルとして使用しています。anObject特定のオブジェクトへのポインターであるとしaGraphますboost::labeled_graph。次に、次のコードが実行されます。

clear_vertex_by_label(anObject, aGraph);
aGraph.remove_vertex(anObject);

Vertex v = aGraph.vertex(anObject);

例外が発生すると予想していましたが、代わりvに の頂点のようaGraphです。現在、次の問題が発生しています(これは でのみ発生すると思いますboost::labeled_graph)。

次のコードを実行すると:

clear_vertex_by_label(anObject, aGraph);
aGraph.remove_vertex(anObject);

Vertex v = aGraph.add_vertex(aSecondObject);

Vertex v2 = aGraph.vertex(anObject);
Vertex v3 = aGraph.vertex(aSecondObject);

このコードの実行後v == v2 == v3、それは正しくありません。

この問題を解決する方法を知っている人はいますか? グラフからラベルを完全に削除する可能性はありますか? 頂点自体はもう同じではありませんが (または存在しなくても)、ラベルはまだ存在し、同じ頂点ノードを「指している」と思います。

ありがとう!

4

1 に答える 1

2

私は間違っているかもしれませんが、これはあなたが言及した前の質問への回答で説明したのと同じバグが原因だと思います.

vertex自体はもう存在しませんが、実装によって の内部マップから削除されないため、関連するものは存在しますvertex descriptorlabeled_graph

私が正しければ、問題は の実装におけるバグの結果ですboost::labeled_graph。Boost 1.54.0 と 1.55.0 (最新リリース) の両方に存在します。

この問題を解決する可能性のあるパッチについては、バグ レポートを参照してください。

于 2013-12-13T13:09:25.113 に答える