2012-06-30 20 views
5

Tüm kenarların özellikleri, ağırlığı ve kapasitesine sahip olmasını istiyorum. BGL'nin her ikisinin de zaten tanımlanmış olduğunu buldum. Sadece 1 mülkü olsaydı o pervane olacağını biliyorumBGL Birden çok özelliğe sahip bir kenar ekleme

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

: Ben nerede grafiğine kenarları eklemek çalışıyorum Grafik İşte

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; 

için Kenar ve Vertex özelliklerini sahip olduğunu tanımlar = 5; Ancak, iki ile biçimlendirme hakkında kafam karıştı. Eğer boost::property uygulanmasına bakarsak

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

cevap

5

bir özellik değeri bu şekilde başlatıldı edilemez olduğunu göreceksiniz: Burada

ben alıyorum hatadır. Ve sonra bile, (weight, capacity) sahip olduğunuz sözdizimi zaten geçerli değil, bu nedenle, bu gibi bir özelliği başlatmak mümkün olsaydı, EdgeProperty prop = EdgeProperty(weight, capacity); veya yalnızca EdgeProperty prop(weight, capacity); yazılır. Ama yine, bu işe yaramaz. Teknik olarak, bu özellik değerini başlatmak gerekir yoludur:

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

Ama bu özellikler artırmak sayısı olarak tür çirkin. Yani, kenar-mülkü varsayılan-inşa etmek daha temiz olacağını ve daha sonra elle tek tek her özelliğini ayarlayın:

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

, daha iyi bir alternatif yerine eski boost :: mülkiyet zincirlerinin paketlenmiş özelliklerini kullanmaktır.

+0

son boost grafik kütüphanesi paketlenmiş özellikleri için bir örnek verebilir misiniz? –

0

doğru biçimidir:

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