Выходные граничные веса BGL - PullRequest
2 голосов
/ 27 января 2011

Я пытаюсь перебрать грани графика и вывести их граничные веса. Я в замешательстве, хотя. Я знаю, как вывести «ребра», но на самом деле это просто (вершина, вершина), которая определяет ребро. Так нужно ли мне индексировать * edgePair.first в EdgeWeightMap, чтобы получить вес ребра, начиная с вершины * edgePair.first? Это не компилируется: «нет совпадения для оператора <<». </p>

#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;
}

Есть мысли?

Спасибо, David

1 Ответ

4 голосов
/ 27 января 2011

В этом коде EdgeWeightProperty объявляется как свойство вершины, а не как свойство ребра, поэтому вставлять ребра с этим свойством не имеет смысла.Попробуйте добавить boost::no_property перед EdgeWeightProperty в вашем adjacency_list typedef.Кроме того, вы можете использовать get(EdgeWeightMap, *edgePair.first) вместо operator[], поскольку это будет работать с большим количеством типов карт свойств.

...