图中没有 boost::get 的匹配函数调用

No matching function call for boost::get in graph

我正在根据来自 boost 的示例 geometry/07_a_graph_route_example 为我的图表建模。

我的图表如下所示:

typedef boost::adjacency_list<boost::listS, boost::vecS, boost::directedS, gG_vertex_property<string, double, pointClass>, gG_edge_property<listClass, pointClass>> graph_type;

graph_type Graph;

gG_vertex_propertygG_edge_property 作为自定义属性。

现在每次我尝试用

调用dijkstra_shortest_path
     boost::dijkstra_shortest_paths(Graph, endVert,                             // Graph Object, End of Search Object
                                       &predecessors[0], &costs[0],                                             // Vectors to store predecessors and costs
                                       boost::get(boost::edge_weight, Graph),
                                       boost::get(boost::vertex_index, Graph),                                  // Vertex Index Map
                                       std::less<double>(), std::plus<double>(),                                // Cost calculating operators
                                       (std::numeric_limits<double>::max)(), double(),                          // limits
                                       boost::dijkstra_visitor<boost::null_visitor>());                         // Visitior, does nothing at the moment

作为 WeightMap 我得到:

error: no matching function for call to 'get' boost::get(boost::edge_weight, Graph)

还有很多不适合我的用例的添加模板。我是如何阅读文档的,这是执行此操作的标准方法。我的属性是否缺少某些内容?

我做错了什么?

感谢您的帮助。

我猜 gG_vertex_propertygG_edge_property 是“捆绑”属性(没有自定义属性这样的东西)。如果是这样,你应该传递这些而不是“boost::get(boost::edge_weight, Graph)”,它试图访问“内部”属性,完全独立的东西。参见 https://www.boost.org/doc/libs/1_77_0/libs/graph/doc/bundles.html。我想如果属性是结构并且边权重保存在 gG_edge_property::weight 中,正确的代码应该是这样的:

 boost::dijkstra_shortest_paths(Graph, endVert,                             // Graph Object, End of Search Object
                                   &predecessors[0], &costs[0],                                             // Vectors to store predecessors and costs
                                   get(&gG_edge_property::weight, Graph), /*!!!!!!!!*/
                                   boost::get(boost::vertex_index, Graph),                                  // Vertex Index Map
                                   std::less<double>(), std::plus<double>(),                                // Cost calculating operators
                                   (std::numeric_limits<double>::max)(), double(),                          // limits
                                   boost::dijkstra_visitor<boost::null_visitor>());                         // Visitior, does nothing at the moment