我MyWeight
在 boost 图中有一个自定义边属性 ( ),并且想要应用 Dijkstra 最短路径搜索。
我的体重类型是,在 boost::operators 的帮助下,可加、可减、小于可比和相等可比。
因为我知道搜索必须从某些东西开始,所以我需要一个相当于零的值,并且要找出一个节点是否可以到达,这是一个非常大的东西。
MyWeight weight_zero(...), weight_inf(...);
// now, weight_zero is less than all other weights, weight_inf greater than all other weights.
boost::dijkstra_shortest_paths( G, target_idx, boost::predecessor_map(&predecessors[0])
.distance_map(&distances[0])
.distance_inf(weight_inf)
.distance_zero(weight_zero)
);
这是我使用自定义重量的原则。它使用 gcc 4.8.1 编译(并且似乎可以正常工作),但是使用 gcc 4.7.3 我得到以下错误(有点缩短):
/usr/include/c++/4.7/limits:-1: In instantiation of 'static constexpr _Tp std::numeric_limits<_Tp>::max() [with _Tp = MyWeight<2, MyEvaluator>]':
/usr/include/c++/4.7/limits:313: error: no matching function for call to 'MyWeight<2, MyEvaluator>::MyWeight(int)'
(MyWeight
实际上是一个模板)
我将此消息解释为“您的类型没有 std::numeric_limit”,另一方面,我告诉 BGL 使用哪个极值并且不明白为什么它会尝试调用数字限制。我认为在这里尝试的最好方法是numeric_limits
识别我的自定义数据类型。
有人可以指出我如何做到这一点吗?
我在这里找到了第一个提示,但是该示例使用了digits
和之类的成员digits10
,我想知道它们的来源。
编辑
这是一个像我一样的例子。无法编译,错误见上。