Jim*_*Jim 5 c++ boost boost-graph
我希望所有的边缘都具有属性,重量和容量.我发现BGL已经定义了这两个.所以我为Graph定义了Edge和Vertex属性
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;
Run Code Online (Sandbox Code Playgroud)
这是我尝试将边添加到图中的位置:
172: EdgeProperty prop = (weight, capacity);
173: add_edge(vertex1,vertex2, prop, g);
Run Code Online (Sandbox Code Playgroud)
如果我只有一个属性,我知道它将是prop = 5; 但是,有两个我对格式化感到困惑.
这是我收到的错误:
graph.cc: In function ‘void con_graph()’:
graph.cc:172: warning: left-hand operand of comma has no effect
Run Code Online (Sandbox Code Playgroud)
如果你看一下boost :: property的实现,你会发现一个属性值不能用这种方式初始化.即便如此,你所拥有的语法(weight, capacity)无论如何都是无效的,因此,如果可以初始化这样的属性,它将被写入EdgeProperty prop = EdgeProperty(weight, capacity);或只是EdgeProperty prop(weight, capacity);.但是,再说一遍,那是行不通的.从技术上讲,这是初始化属性值所需的方法:
EdgeProperty prop = EdgeProperty(weight, property<edge_capacity_t, int>(capacity));
Run Code Online (Sandbox Code Playgroud)
但随着物业数量的增加,这有点难看.因此,默认构造edge-property然后手动设置每个单独的属性会更简洁:
EdgeProperty prop;
get_property_value(prop, edge_weight_t) = weight;
get_property_value(prop, edge_capacity_t) = capacity;
Run Code Online (Sandbox Code Playgroud)
当然,更好的选择是使用捆绑属性而不是旧的boost :: property链.
| 归档时间: |
|
| 查看次数: |
1449 次 |
| 最近记录: |