你是什么意思,你不能子类化顶点?您可以使用自己的顶点类,只需在 Graph 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
第二个链接似乎有一个使用成员指针使用捆绑属性的 Boost 函数。
这有帮助吗?