图中没有 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_property
和 gG_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_property
和 gG_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
我正在根据来自 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_property
和 gG_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_property
和 gG_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