2011-01-26 6 views
2

J'essaie de parcourir les bords d'un graphique et de sortir leurs poids de bord. Je suis confus cependant. Je sais comment sortir les "bords", mais c'est en fait juste un (sommet, sommet) qui définit le bord. Donc, est-ce que j'indexe * edgePair.first dans EdgeWeightMap pour obtenir le poids du bord à partir du sommet * edgePair.first? Cela ne compile pas: "aucune correspondance pour l'opérateur < <".Sortie poids BGL Edge

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

Des pensées?

Merci, David

+0

Veuillez consulter: http://programmingexamples.net/index.php?title=Boost pour des exemples simples. –

Répondre

4

Dans ce code, EdgeWeightProperty est déclaré comme une propriété de sommet plutôt que d'une propriété de bord, et il ne fait 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. En outre, vous pouvez utiliser get(EdgeWeightMap, *edgePair.first) plutôt que operator[] car cela fonctionnera avec plus de types de mappages de propriétés.