The Boykov Kolmogorov Max Flow algorithm有几个命名参数。不知怎的,我在将这些参数传递给函数时遇到了麻烦。
当我做
之类的事情时boykov_kolmogorov_max_flow(g, origin, sink, edge_capacity(get(edge_capacity, g)));
然后我得到了:
error: ‘edge_capacity’ cannot be used as a function
(Nb:我知道上面的调用毫无意义,但它显示出了什么问题。)
我知道我可以使用get(edge_capacity, g)
获取容量图并使用它而不是传递我自己的容量图。我一般都对是否有关于何时可以专门传入命名参数的规则感兴趣,而且即使boost规范没有特别提到命名参数也没有。
答案 0 :(得分:1)
看起来非常像是在使用冲突角色的名称,即edge_capacity
。
从http://www.boost.org/doc/libs/1_57_0/boost/graph/named_function_params.hpp开始,您可能需要使用capacity_map
:
尝试
boykov_kolmogorov_max_flow(g, origin, sink, boost::capacity_map(get(edge_capacity, g)));
如果可行,这看起来像文档错误
更新是的,似乎是这种情况。例如,请参阅edmonds_karp_max_flow
的文档,其中相应的命名参数记录为:
IN:
capacity_map(CapacityEdgeMap cap)
边缘容量属性映射。该类型必须是常量左值属性映射的模型。地图的关键类型必须是图形的边缘描述符类型。
默认:
get(edge_capacity, g)