2011-01-26 1 views
2

Я пытаюсь выполнить итерацию по краям графа и вывести их веса. Однако я смущен. Я знаю, как выводить «ребра», но на самом деле это просто (вершина, вершина), которая определяет ребро. Так что я индексирую * edgePair.first в EdgeWeightMap, чтобы получить вес края, начиная с вершины * edgePair.first? Это не скомпилируется: «нет соответствия оператору < <».Выход BGL Edge Weights

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

Любые мысли?

Спасибо, Дэвид

+0

См. Http://programmingexamples.net/index.php?title=Boost для простых примеров. –

ответ

4

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

 Смежные вопросы

  • Нет связанных вопросов^_^