私は次のようにインスタンス化グラフを持っている:ブーストグラフライブラリで頂点記述子を追跡する必要がありますか?
typedef boost::property<boost::edge_weight_t, uint32_t> EdgeWeightProperty;
typedef boost::property<boost::vertex_index_t, uint32_t> VertexProperty;
typedef boost::adjacency_list<boost::vecS, boost::setS,
boost::undirectedS, VertexProperty,
EdgeWeightProperty, boost::setS> Graph;
私はこのグラフを更新する必要があり、例えばエッジを追加または削除します。私は頂点を保存するためのセットを使用していますので、私は彼らのインデックスを使用することはできませんが、私はマップを保つことができます。
unordered_map<uint32_t, Vertex_Descriptor>
頂点記述子に私のインデックスをマップするので、私は中に直接、後でアクセスすることができますBGLでは、このアプローチが有効ですが、このマップオーバーヘッドが追加されます。
私は何とかカスタムインデックスを指定することができますか、BGLに頂点を置く/置くときに比較するものはありますか?または、頂点記述子をマップに保持することが最善の方法ですか? coliru
素早く答えてくれてありがとう!ヘルパー関数は他のコードからの残差でした。悲しいことに、プログラムが正しく機能するには、プログラムのスペースを倍にする必要があります。 ( – Fynn
アイデア:いつでも外部インデックスを保持する必要はありません。また、ベクトルを使用してより効果的な割り当てを行うこともできます。これらの回答もまた、侵入型コンテナの使用方法を参照してください。 :https://stackoverflow.com/questions/32296206/bgl-indexing-a-vertex-by-keysおよびhttps://stackoverflow.com/questions/45845469/make-a-boost-filtered-graph-by-vertex -label-property/45850742#45850742 – sehe