頂点をサブクラス化できないとはどういう意味ですか? 独自の頂点クラスを使用できます。グラフの typedef で指定するだけです。BGL アルゴリズムを使用する場合は、メンバーをプロパティとして使用することもできます。
逆に (IMO の方が難しい)、頂点プロパティ リストを作成し、頂点記述子を使用してアクセスする必要があります。
編集:グラフタイプを定義するときに頂点/エッジクラスを指定します:
struct Vertex {
double some_property;
};
struct Edge {
double weight;
};
typedef boost::adjacency_list<
boost::listS, boost::vecS, boost::undirectedS, Vertex, Edge
> Graph; //sorry about the formatting
Graph g;
どこから g[vertex_descriptor] が Vertex への参照を返すべきか、例えば:
//add 100 vertices
for (int i=0; i<100; ++i) {
Graph::vertex_descriptor v = add_vertex(g);
g[v].some_property = -1.0;
}
//zero some_property for all vertices
for (Graph::vertex_iterator i = vertices(g).first;
i != vertices(g).second;
++i)
{
g[*i].some_property = 0.0;
}
これらのプロパティを使用しているビジター コードは見つかりませんでしたが、BGL ドキュメントの関連部分は見つかりました。
1)代わりに使用することを推奨するInternal Properties
に関する部分:
2) Bundled Properties
2番目のリンクには、メンバーポインターを使用してバンドルされたプロパティを利用する Boost 関数があるようです。
これは役に立ちますか?