Domanda

Sto provando ad iterare attraverso i bordi di un grafico e uscita loro pesi bordo. Sono confuso però. So come uscita i "bordi", ma questo è in realtà solo una (vertice, vertice) che definisce il bordo. Anch'io indice * edgePair.first nella EdgeWeightMap per ottenere il peso del bordo a partire dal vertice * edgePair.first? Questo non può essere compilato: "non può competere per l'operatore <<".

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

Qualche idea?

Grazie, David

È stato utile?

Soluzione

In questo codice, EdgeWeightProperty viene dichiarata come proprietà vertice piuttosto che una proprietà bordo, e quindi non ha senso inserire bordi con tale proprietà. Prova ad aggiungere boost::no_property prima EdgeWeightProperty nella vostra typedef adjacency_list. Inoltre, si potrebbe desiderare di utilizzare get(EdgeWeightMap, *edgePair.first) piuttosto che operator[] perché che funzionerà con i tipi di mappa più di proprietà.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top