我目前正在尝试定义增强图的外部属性。我使用一些捆绑属性作为内部属性:
struct VertexProperties
{
int demand;
};
struct EdgeProperties
{
uint capacity;
int cost;
};
typedef adjacency_list <vecS, vecS, bidirectionalS, VertexProperties, EdgeProperties> Graph;
然而,在算法过程中,我需要一些外部属性,也就是说,我希望能够将图的边/顶点映射到存储在 std::vector 中的元素,以便我可以通过运算符 [] 访问它们(Edge e).我站在 boost 文档前面,毫无头绪。看来我需要一个 property_map,但我不知道如何将它们与向量一起使用。到目前为止,我发现的唯一示例涉及从顶点到向量的映射,但由于顶点是无符号整数,因此这是微不足道的。
到目前为止,我对 boost 感到非常沮丧,我认为它可以为我节省一个时间lot有时间自己实现和测试图形类,我真的不明白这种疯狂的模板元编程的东西......
无论图表中有哪些内部和/或捆绑属性,您都可以创建外部属性映射。在边缘上创建属性映射有些困难,因为您需要edge_index
地图,以及adjacency_list
默认情况下没有这些;compressed_sparse_row_graph
确实如此,但其结构在构造后大多是只读的。您可以使用associative_property_map
在边缘上,或者创建一个边缘索引图作为内部属性(如果您不经常更改图形),填充它,然后使用它来构建外部属性图(使用shared_array_property_map
, 例如)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)