Question

Je suis en train de itérer à travers les bords d'un graphique et la sortie de leur poids de bord. Je suis confus cependant. Je sais comment sortir les « bords », mais cela est en fait juste un (sommet, sommet) qui définit le bord. Donc, faire l'index I * edgePair.first dans le EdgeWeightMap pour obtenir le poids du bord à partir de sommet * edgePair.first? Cela ne compile pas: « aucune correspondance pour l'opérateur << ».

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

Toutes les pensées?

Merci, David

Était-ce utile?

La solution

Dans ce code, EdgeWeightProperty est déclarée comme une propriété de sommet plutôt que d'une propriété de bord, et il n'a pas de sens d'insérer des bords avec cette propriété. Essayez d'ajouter boost::no_property avant EdgeWeightProperty dans votre adjacency_list typedef. , Vous pouvez également utiliser get(EdgeWeightMap, *edgePair.first) plutôt que operator[] parce que cela va travailler avec plus de types carte de propriété.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top