Boost Subgraph获取边权重映射用于Dijkstra的编译错误问询
解决Boost Subgraph获取边权重映射的编译错误
你的编译错误根源在于**property_map模板的第二个参数使用错误**——你传入了属性值的类型int,但Boost要求这里传入的是属性标签(property tag),也就是boost::edge_weight_t。
修正后的代码
把获取权重映射的代码改成下面任意一种形式即可:
方式1:显式指定正确的模板参数
boost::property_map<UndirectedGraphS, boost::edge_weight_t>::type weightmap = get(boost::edge_weight, graph);
方式2:用auto自动推导类型(更简洁推荐)
auto weightmap = get(boost::edge_weight, graph);
错误原因解释
Boost Graph Library的property_map模板需要通过属性标签来定位对应的属性映射,而不是属性值的类型。你之前传入int作为第二个参数,编译器会误以为你要找一个类型为int的顶点/边属性,而不是edge_weight这个预定义的权重属性,这就导致了一系列模板匹配失败的编译错误。
另外,因为你使用的是subgraph,它继承了底层图的属性体系,所以只要底层图(UndirectedGraph)正确定义了EdgeWeightProperty,用上面的方式就能正确获取到全局图的边权重映射,完全可以直接用于Dijkstra算法。
内容的提问来源于stack exchange,提问作者Bugcatcher
相关产品推荐
相关产品推荐

