Вопрос
Я пытаюсь итерации по краям графика и выводу их веса. Я в замешательстве. Я знаю, как вывести «края», но на самом деле это просто (вершина, вершина), которая определяет край. Так что я индексирую *EdgePair. Первый в EdgeWeightMap, чтобы получить вес края, начиная с вершины *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;
}
Какие-нибудь мысли?
Спасибо, Дэвид
Решение
В этом коде, EdgeWeightProperty
объявляется как свойство вершины, а не как собственность Edge, и поэтому не имеет смысла вставлять края с этим свойством. Попробуйте добавить boost::no_property
до EdgeWeightProperty
в твоей adjacency_list
typedef. Кроме того, вы можете использовать get(EdgeWeightMap, *edgePair.first)
скорее, чем operator[]
Потому что это будет работать с большим количеством типов карт собственности.