2012-06-30 29 views
5

Tôi muốn có tất cả các cạnh có thuộc tính, trọng lượng và dung lượng. Tôi thấy rằng BGL có cả hai đã được xác định. Vì vậy, tôi xác định tính chất Edge và Vertex cho GraphBGL Thêm một cạnh với nhiều thuộc tính

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; 

Đây là nơi tôi đang cố gắng để thêm các cạnh để đồ thị:

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

Nếu tôi có chỉ 1 tài sản tôi biết nó sẽ là chỗ dựa = 5; Tuy nhiên, với hai tôi nhầm lẫn về định dạng.

Đây là lỗi tôi nhận được:

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

Trả lời

5

Nếu bạn nhìn vào việc thực hiện các boost::property bạn sẽ thấy rằng một giá trị tài sản không thể được khởi tạo theo cách này. Và thậm chí sau đó, cú pháp bạn có (weight, capacity) là không hợp lệ anyways, vì vậy, nếu nó có thể khởi tạo tài sản như thế, nó sẽ được viết EdgeProperty prop = EdgeProperty(weight, capacity); hoặc chỉ EdgeProperty prop(weight, capacity);. Nhưng, một lần nữa, điều đó sẽ không hiệu quả. Về mặt kỹ thuật, đây là cách bạn sẽ cần phải khởi tạo giá trị thuộc tính:

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

Nhưng điều này là xấu xí khi số lượng thuộc tính tăng lên. Vì vậy, nó sẽ sạch hơn để mặc định-xây dựng cạnh bất động sản và sau đó tự đặt mỗi tài sản cá nhân:

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

Tất nhiên, giải pháp thay thế tốt hơn là sử dụng các thuộc tính kèm thay cho chuỗi tăng :: sở hữu cũ.

+0

bạn có thể đưa ra một ví dụ cho tính kèm của thư viện đồ thị tăng mới nhất? –

0

Hình thức đúng là:

EdgeProperty prop; 
get_property_value(prop, edge_weight) = weight; 
get_property_value(prop, edge_capacity) = capacity; 
Các vấn đề liên quan