2009-04-03 10 views
3

を作成し、バンドルされたプロパティを持つboost :: graphを使用します。私はさまざまな可能なエッジ加重方式を使用して検索を実行できるようにしたいと考えています。可能であればバンドルされたプロパティの追加クラスを作成せず、新しいグラフを作成せずに、またはグラフ内の既存のプロパティをすべて変更せずに検索のタイプ​​に応じて異なる重みマップを渡したいと思います。boost :: graph edge_weightプロパティマップ

edge_weight_tのproperty_mapを手動で作成できますか?

typedef boost::property_map<SSPSGraph_t, boost::edge_weight_t>::type WeightMap; 
typedef boost::property<boost::edge_weight_t, float> DistanceProperty; 

そして私はちょうど適切なvalues--

distances[e]= ? 
までの距離[E]

WeightMap distances; 
edge_descriptor_t e = some_edge_or_another; 
float d=some_derived_distance_value; 

を行うことができると割り当てるしたいと思います:ここで私はこれまで持っているものです

また、バンドルされたプロパティの新しい構造を分解して補う必要があります。これは避けようとしていたことですが、そこからウェイトマップを作成する必要がありますか?新しいboost :: graph;私は完全にここで何かをやっていないと仮定しないでください。

答えて

2

ご質問がわかりません。ここであなたを助けるかもしれないいくつかのヒントがあります:

ブースト::あなたはWeightMapがを定義するために使用しているproperty_mapは、あなたが(あなたが唯一のDistancePropertyを定義することにより、必要なものの半分をやった)、グラフ内の対応するプロパティを追加している必要があります

typedef boost::property<boost::edge_weight_t, float> DistanceProperty; 

typedef boost::adjacency_list<boost::vecS, boost::vecS, boost::undirS, boost::no_property, DistanceProperty> MyGraph; 

これが行われていない場合、boost :: property_mapはあなたを助けません。

試したいスキームごとに異なるウェイトプロパティを追加したくない場合は、そのようなプロパティをグラフ定義の外に定義することもできます。これは、 - std :: mapとboost::associative_propertyを使用すると簡単ですが、マップの効率が良い - boost::vector_property_mapを使用するとより効率的です(基になるstd :: vectorのおかげ)が、識別子property_mapを必要としますすなわち、提供されたエッジから数値識別子(理想的には0とnum_edges()-1)の間を抽出できるproperty_map。このproperty_mapは、通常、グラフ内で定義されます。

私の答えがあなたに(または十分ではない)助けにならない場合は、私の答えを更新することができますので、あなたの質問でもう少し正確にしてください!

関連する問題