2012-06-30 24 views
5

Quiero tener todos los bordes para las propiedades, peso y capacidad. Descubrí que BGL ya tiene estos dos definidos. Así defino Edge y Vertex propiedades del gráficoBGL Agregar un borde con propiedades múltiples

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 yo estoy tratando de añadir los bordes de la gráfica:

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

Si tuviera sólo 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 

Respuesta

5

Si nos fijamos en la implementación de boost::property verá que un valor de propiedad no se puede inicializar esta manera. Y aun así, la sintaxis que tiene (weight, capacity) no es válida de todos modos, por lo tanto, si fuera posible inicializar la propiedad de esa manera, se escribiría EdgeProperty prop = EdgeProperty(weight, capacity); o simplemente EdgeProperty prop(weight, capacity);. Pero, nuevamente, eso no funcionará. Técnicamente, este es el camino que se necesita para inicializar el valor de la propiedad:

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

Pero esto es un poco feo como el número de propiedades aumentan. Por lo tanto, sería más limpio por defecto-construir el borde propiedad 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 utilizar las propiedades de paquetes en lugar de las cadenas de impulso :: propiedad de más edad.

+0

podría dar un ejemplo para las propiedades de paquetes de última biblioteca gráfica impulso? –

0

La forma correcta es:

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