BGL Agregando un borde con múltiples propiedades

Quiero tener todos los bordes tienen propiedades, peso y capacidad. Descubrí que BGL tiene ambos ya definidos. Así que defino las propiedades de borde y vértice para el gráfico.

 typedef property<vertex_name_t, string> VertexProperty;
 typedef property<edge_weight_t, int, property<edge_capacity_t, int> > EdgeProperty;
 typedef adjacency_list<listS,vecS, undirectedS, VertexProperty, EdgeProperty > Graph;

Aquí es donde estoy tratando de agregar los bordes al gráfico:

172: EdgeProperty prop = (weight, capacity);
173: add_edge(vertex1,vertex2, prop, g);

Si tuviera solo 1 propiedad, sé que sería prop = 5; Sin embargo, con dos estoy confundido sobre el formato.

Aquí está el error que estoy recibiendo:

graph.cc: In function ‘void con_graph()’:
graph.cc:172: warning: left-hand operand of comma has no effect

preguntado el 30 de junio de 12 a las 22:06

2 Respuestas

Si observa la implementación de impulso::propiedad verá que un valor de propiedad no se puede inicializar de esta manera. E incluso entonces, la sintaxis que tienes (weight, capacity) no es válido de todos modos, por lo que, si fuera posible inicializar la propiedad de esa manera, se escribiría EdgeProperty prop = EdgeProperty(weight, capacity); o solo EdgeProperty prop(weight, capacity);. Pero, de nuevo, eso no funcionará. Técnicamente, esta es la forma en que necesitaría inicializar el valor de la propiedad:

EdgeProperty prop = EdgeProperty(weight, property<edge_capacity_t, int>(capacity));

Pero esto es un poco feo a medida que aumenta el número de propiedades. Por lo tanto, sería más limpio construir por defecto la propiedad de borde y luego configurar manualmente cada propiedad individual:

EdgeProperty prop;
get_property_value(prop, edge_weight_t) = weight;
get_property_value(prop, edge_capacity_t) = capacity;

Por supuesto, la mejor alternativa es usar propiedades agrupadas en lugar de las antiguas cadenas boost::property.

Respondido 01 Jul 12, 01:07

¿podría dar un ejemplo de las propiedades agrupadas de la última biblioteca de gráficos boost? - Mehmet fide

La forma correcta es:

EdgeProperty prop;
get_property_value(prop, edge_weight) = weight;
get_property_value(prop, edge_capacity) = capacity;

Respondido 14 Jul 15, 12:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.