2017-05-17 20 views
1

adjacency_listグラフ(および頂点のグループ)の頂点とエッジの外部プロパティを保持したいと考えています。それらのプロパティによって頂点にアクセスできる必要があります。 たとえば、いくつかのウェイトが割り当てられたすべての頂点を繰り返し処理し、それらのエッジを取得したいとします。adjacency_listの定数頂点ID

しかし、頂点コンテナも設定する必要があります。 このコンテナで頂点を削除すると、頂点記述子が無効になることがあります。

問題は、外部プロパティを無効なvertex_descriptorsにマップできるようになったことです。

1つのアプローチは、vertex_indexプロパティを追加することです。これはうまくいきません。方向性があるため、vertex_descriptorでvertex_indexを取得できますが、それ以外の方法では取得できません。つまり、私は2つの頂点の間に辺を追加することはできません。

別の有望な解決策は、ラベル付きグラフを使用することでした。このグラフでは、エッジのみをラベルで追加できます。私は、ラベルIDを持つ外部データを保存することでかなり遠くになっていたかもしれません。残念ながら、adjacency_listインターフェイスのすべてがラベルを使用して再実装されているわけではありません。 out_edges。これは、頂点記述子にアクセスできる必要があることを意味し、表示されるように、ラベルのみを使用することは(妥当な時間内に)不可能であることを意味します。here

もっと良い解決策は、 vertex_labelプロパティこれはあまりにも複雑で、動作しません(上記の例)。

頂点が外部データに関連するのは一般的ではありませんか?どうすればいい?

+0

「すべての頂点に重みが割り当てられました」 - エッジを意味しましたか? – sehe

+0

いいえ、例のコードのように - ver_by_weight.equal_range(重み)。 – bravesirrobin

答えて

0

頂点記述子から独自のIDへの双方向マッピングを使用できます。

頂点コンテナに任意のノードベースコンテナセレクタを使用する限り、すべて設定されています。

(グラフはほとんどが読み取り専用である場合は特に、すべての空想を必要としないかもしれないが - または縮小専用など)最大の利便性のための2領域マップを見て、おそらくtransform_value_property_mapをお持ちの

+0

頂点記述子が無効になった場合、どのように双方向マッピングを使用できますか?内部プロパティのみを使用できるので、グラフクラスは頂点記述子を更新します。 BGLは内部双方向プロパティを持っていますか? – bravesirrobin

+0

ノードベースのコンテナセレクタとは何ですか? :) – bravesirrobin

+0

ノードベースは、データ構造の割り当てがノードを使用する場合です。したがって、 'listS'または' setS'が行います。 "頂点記述子が無効になるとき" - これらのノードベースのコンテナを使用するときは、1になりません。 (¹実際に削除されたディスクリプタは無効になります) – sehe

関連する問題