2012-06-30 18 views
5

मैं सभी किनारों को गुण, वजन और क्षमता के साथ रखना चाहता हूं। मैंने पाया कि बीजीएल इन दोनों को पहले ही परिभाषित किया गया है। इसलिए मैं ग्राफ़बीजीएल एकाधिक गुणों के साथ किनारे जोड़ना

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; 

यहाँ के लिए एज और वर्टेक्स गुण को परिभाषित किया गया है, जहां मैं ग्राफ के किनारों को जोड़ने के लिए कोशिश कर रहा हूँ:

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

अगर मैं सिर्फ 1 संपत्ति था मैं इसे प्रोप होगा पता = 5; हालांकि, दो के साथ मैं स्वरूपण के बारे में उलझन में हूँ।

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

उत्तर

5

आप boost::property के कार्यान्वयन को देखें, तो आपको लगता है कि एक संपत्ति के मूल्य इस तरह से आरंभ नहीं किया जा सकता है देखेंगे:

यहाँ त्रुटि मैं प्राप्त कर रहा है। और फिर भी, आपके पास (weight, capacity) सिंटैक्स मान्य नहीं है, इसलिए, यदि इस तरह की संपत्ति को प्रारंभ करना संभव था, तो यह EdgeProperty prop = EdgeProperty(weight, capacity); या केवल EdgeProperty prop(weight, capacity); लिखा जाएगा। लेकिन, फिर से, यह काम नहीं करेगा। तकनीकी तौर पर, इस तरह से आप संपत्ति के मूल्य को प्रारंभ करने की आवश्यकता होगी है:

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

लेकिन यह गुणों को बढ़ाने की संख्या के रूप में एक तरह से बदसूरत है। इसलिए, यह किनारे संपत्ति डिफ़ॉल्ट-निर्माण करने के लिए क्लीनर होगा और फिर मैन्युअल रूप से प्रत्येक व्यक्ति के गुण सेट:

EdgeProperty prop; 
get_property_value(prop, edge_weight_t) = weight; 
get_property_value(prop, edge_capacity_t) = capacity; 
बेशक

, बेहतर विकल्प पुराने बढ़ावा :: संपत्ति चेन के बजाय बंडल गुणों का उपयोग करने के लिए है।

+0

आप नवीनतम बढ़ावा ग्राफ पुस्तकालय के बंडल गुण के लिए एक उदाहरण दे सकता है? –

0

सही रूप है:

EdgeProperty prop; 
get_property_value(prop, edge_weight) = weight; 
get_property_value(prop, edge_capacity) = capacity; 
संबंधित मुद्दे