我试图遍历图形的边缘并输出它们的边缘权重。我很困惑。我知道如何输出“边缘”,但这实际上只是定义边缘的(顶点,顶点)。那么我将* edgePair.first索引到EdgeWeightMap中以获得从vertex * edgePair.first开始的边的权重吗?这不编译:“不匹配运算符<<”。
#include <iostream>
#include <boost/graph/graph_traits.hpp>
#include <boost/graph/adjacency_list.hpp>
typedef boost::property<boost::edge_weight_t, double> EdgeWeightProperty;
typedef boost::adjacency_list<boost::vecS, boost::vecS, boost::undirectedS, EdgeWeightProperty> Graph;
int main(int,char*[])
{
// Create a graph object
Graph g(2);
EdgeWeightProperty e = 5;
add_edge(0, 1, e, g);
boost::property_map<Graph, boost::edge_weight_t>::type EdgeWeightMap = get(boost::edge_weight_t(), g);
typedef boost::graph_traits<Graph>::edge_iterator edge_iter;
std::pair<edge_iter, edge_iter> edgePair;
for(edgePair = edges(g); edgePair.first != edgePair.second; ++edgePair.first)
{
std::cout << EdgeWeightMap[*edgePair.first] << " ";
}
return 0;
}
有什么想法吗?
谢谢, 大卫
答案 0 :(得分:4)
在此代码中,EdgeWeightProperty
被声明为顶点属性而不是边属性,因此使用该属性插入边是没有意义的。尝试在boost::no_property
typedef EdgeWeightProperty
之前添加adjacency_list
。此外,您可能希望使用get(EdgeWeightMap, *edgePair.first)
而不是operator[]
,因为这将适用于更多属性地图类型。