Frage

Ich versuche, durch die Ränder eines Diagramms zu iterieren und ihre Kantengewichte auszugeben. Ich bin allerdings verwirrt. Ich weiß, wie man die "Kanten" ausgibt, aber dies ist eigentlich nur ein (Scheitelpunkt, Scheitelpunkt), das die Kante definiert. Index *edgepair.First in das Edge -WeightMap, um das Gewicht der Kante ab Scheitelpunkt *edgepair.First zu erhalten? Dies kompiliert nicht: "Kein Übereinstimmung für den Operator <<".

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

Irgendwelche Gedanken?

Danke, David

War es hilfreich?

Lösung

In diesem Code, EdgeWeightProperty wird eher als Vertex -Eigenschaft als als Edge -Eigenschaft deklariert, und es ist daher nicht sinnvoll, Kanten mit dieser Eigenschaft einzufügen. Versuchen Sie hinzu boost::no_property Vor EdgeWeightProperty in deiner adjacency_list Typedef. Vielleicht möchten Sie auch verwenden get(EdgeWeightMap, *edgePair.first) statt operator[] Denn das funktioniert mit mehr Eigenschaftskartentypen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top