Ausgang BGL -Kantengewichte
-
25-10-2019 - |
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
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.