2012-09-19 11 views
5

मुझे ग्राफ के किनारों के माध्यम से पुनरावृत्ति करने और प्रत्येक किनारे के वजन की जांच करने की आवश्यकता है। मैं किनारों को संशोधित नहीं कर रहा हूं, इसलिए मेरा कार्य ग्राफ के लिए एक कॉन्स्ट-संदर्भ लेता है। हालांकि, किनारे के वजन को पाने का एकमात्र तरीका यह है कि संपत्ति मानचित्र तक पहुंच प्राप्त करना, जो कि कॉन्स-नेस का उल्लंघन करता है।एक कॉन्स बूस्ट के किनारे के वजन के माध्यम से इटरेटिंग :: ग्राफ

void printEdgeWeights(const Graph& graph) { 
    typedef Graph::edge_iterator EdgeIterator; 
    std::pair<EdgeIterator, EdgeIterator> edges = boost::edges(graph); 

    typedef boost::property_map<Graph, boost::edge_weight_t>::type WeightMap; 
    // The following line will not compile: 
    WeightMap weights = boost::get(boost::edge_weight_t(), graph); 

    EdgeIterator edge; 
    for (edge = edges.first; edge != edges.second; ++edge) { 
    std::cout << boost::get(weights, *edge) << std::endl; 
    } 
} 

तो मैं यह करने के लिए है:

Graph& trust_me = const_cast<Graph&>(graph); 
WeightMap weights = boost::get(boost::edge_weight_t(), trust_me); 

वहाँ एक रास्ता इस से बचने के लिए है?

एक तरफ नोट पर, संपत्ति मानचित्र लुकअप निरंतर समय होगा?

संदर्भ के लिए, यहां ग्राफ की मेरी परिभाषा है।

struct FeatureIndex { ... }; 
typedef boost::property<boost::vertex_index_t, int, 
         FeatureIndex> 
     VertexProperty; 
typedef boost::property<boost::edge_index_t, int, 
     boost::property<boost::edge_weight_t, int> > 
     EdgeProperty; 
typedef boost::subgraph< 
      boost::adjacency_list<boost::vecS, 
           boost::vecS, 
           boost::undirectedS, 
           VertexProperty, 
           EdgeProperty> > 
     Graph; 

धन्यवाद!

उत्तर

4

भविष्य के संदर्भ के लिए, मैंने इसे पाया। यह

const boost::property_map<Graph, boost::edge_weight_t>::type 

काम नहीं करेगा लेकिन property_map एक const_type

boost::property_map<Graph, boost::edge_weight_t>::const_type 

प्राप्त (के लिए दस्तावेज़ को परिभाषित करता है) इस पृष्ठ पर है: http://www.boost.org/doc/libs/1_51_0/libs/graph/doc/adjacency_list.html

संबंधित मुद्दे