2016-10-11 57 views
3

我正嘗試使用Boost Graph Library訪問格式化輸入文件的點(graphviz)的圖形標籤。以下是圖表類型的typedef:訪問BGL GraphProperty

struct DotVertex { 
    std::string label; 
}; 

struct DotEdge { 
    std::string label; 
}; 

struct DotGraph { 
    std::string label; 
}; 

typedef boost::adjacency_list<boost::vecS, boost::vecS, boost::directedS, 
           DotVertex, DotEdge, DotGraph> graph_t; 

這就是我如何分配的動態特性:

graph_t graphviz; 

    boost::dynamic_properties dp(boost::ignore_other_properties); 

    dp.property("label",  boost::get(&DotGraph::label,   graphviz)); 
    dp.property("label",  boost::get(&DotVertex::label,   graphviz)); 
    dp.property("label",  boost::get(&DotEdge::label,   graphviz)); 
    std::ifstream ifs("sample.dot"); 
    bool status = boost::read_graphviz(ifs, graphviz, dp); 

編譯器抱怨分配爲DotGraph ::標籤有錯誤消息:

read_graph.cc:25:30: error: no matching function for call to 'get' dp.property("label",  boost::get(&DotGraph::label,   graphviz)); 

有人可以指出在這種情況下閱讀圖形標籤的方便方法是什麼?謝謝!

回答

3

管理映射使用圖形特性如步驟3 read_graphviz() in Boost::Graph, pass to constructor的發現:

boost::ref_property_map<graph_t *, std::string> dg_label(get_property(graphviz, &DotGraph::label)); 
    dp.property("label",  dg_label); 

然後可以通過訪問標籤:

std::cout<<get_property(graphviz, &DotGraph::label)<<std::endl; 
+0

我已經忘記了這一點,雖然我寫的回答鏈接:) – sehe