BGL 添加具有多个属性的边

2024-01-27

我希望所有边缘都具有属性、重量和容量。我发现 BGL 已经定义了这两个。所以我为图定义了边和顶点属性

 typedef property<vertex_name_t, string> VertexProperty;
 typedef property<edge_weight_t, int, property<edge_capacity_t, int> > EdgeProperty;
 typedef adjacency_list<listS,vecS, undirectedS, VertexProperty, EdgeProperty > Graph;

这是我尝试向图表添加边的地方:

172: EdgeProperty prop = (weight, capacity);
173: add_edge(vertex1,vertex2, prop, g);

如果我只有 1 个属性,我知道它将是 prop = 5;然而,对于两个我对格式感到困惑。

这是我收到的错误:

graph.cc: In function ‘void con_graph()’:
graph.cc:172: warning: left-hand operand of comma has no effect

如果你看一下实施提升::属性 http://www.boost.org/doc/libs/1_49_0/boost/pending/property.hpp您将看到属性值无法以这种方式初始化。即便如此,你所拥有的语法(weight, capacity)无论如何都是无效的,所以,如果可以像这样初始化属性,它会被写成EdgeProperty prop = EdgeProperty(weight, capacity);要不就EdgeProperty prop(weight, capacity);。但是,这又是行不通的。从技术上讲,这是您需要初始化属性值的方式:

EdgeProperty prop = EdgeProperty(weight, property<edge_capacity_t, int>(capacity));

但随着房产数量的增加,这有点难看。因此,默认构造边缘属性然后手动设置每个单独的属性会更清晰:

EdgeProperty prop;
get_property_value(prop, edge_weight_t) = weight;
get_property_value(prop, edge_capacity_t) = capacity;

当然,更好的选择是使用捆绑属性而不是旧的 bo​​ost::property 链。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

BGL 添加具有多个属性的边 的相关文章

随机推荐