Pregunta
Estoy tratando de iterar a través de los bordes de un gráfico y generar sus pesos de borde. Aunque estoy confundido. Sé cómo generar los "bordes", pero esto es en realidad solo un (vértice, vértice) que define el borde. Entonces, ¿indexo *EdgePair.first en el borde de peso borde para obtener el peso del borde a partir de vértice *EdgePair.first? Esto no compila: "Sin coincidencia para el operador <<".
#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;
}
¿Alguna idea?
Gracias David
Solución
En este código, EdgeWeightProperty
se declara como una propiedad de vértice en lugar de una propiedad de borde, por lo que no tiene sentido insertar bordes con esa propiedad. Intenta agregar boost::no_property
antes de EdgeWeightProperty
en tus adjacency_list
typedef. Además, es posible que desee usar get(EdgeWeightMap, *edgePair.first)
más bien que operator[]
Porque eso funcionará con más tipos de mapa de propiedades.