簡體   English   中英

Boost BGL:Edge屬性映射?

[英]Boost BGL: Edge property maps?

我試圖給出一個連接邊列表的圖形,但我的邊有一個得分(一個權重)和一個轉換(用戶定義的數據類型,它基本上是從一個點到另一個點的轉換矩陣)。 我已經嘗試了很多方法來做到這一點,但我檢查過的每個網站(包括stackoverflow)都有不同的方式來做這件事,這並不是100%適合我的問題。 我已經嘗試了所有這些,但是現在我已經解決了以下問題:

struct EdgeInfoProperty{
    int score;
    Trans trans;
};

typedef boost::adjacency_list<boost::listS, boost::vecS, boost::directedS, boost::no_property, EdgeInfoProperty > mygraph;
typedef mygraph::edge_descriptor Edge;

mygraph G;

for (i..i++){//some is
    for(j..j++){//some js
        boost::graph_traits<mygraph>::vertex_descriptor u, v;
        u = vertex(i, G);
        v = vertex(j, G);
        EdgeInfoProperty property_uv;
        property_uv.score=s[i]+s[j];//some score
        property_uv.trans = T[i]*T[j];
        boost::add_edge(u,v,property_uv,G);
    }
}

但是從我從大多數網站上可以看出來的情況來看,只宣稱一個結構是不夠的......

的確,現在當我嘗試打印我的圖表時:

typedef boost::property_map<mygraph, boost::vertex_index_t>::type IndexMap;
IndexMap index = get(boost::vertex_index, G);

std::cout << "vertices(g) = ";
typedef boost::graph_traits<mygraph>::vertex_iterator vertex_iter;
std::pair<vertex_iter, vertex_iter> vp;
for (vp = boost::vertices(G); vp.first != vp.second; ++vp.first)
    std::cout << index[*vp.first] <<  " ";
std::cout << std::endl;

std::cout << "edges(g) = ";
boost::graph_traits<mygraph>::edge_iterator ei, ei_end;
for (boost::tie(ei, ei_end) = edges(G); ei != ei_end; ++ei)
    //----- how do I get the edge property?
    //EdgeInfoProperty prop = boost::get(EdgeInfoProperty, *ei);
    std::cout << "(" << index[source(*ei, G)]<< "," << index[target(*ei, G)] << ") ";

當我試圖獲得EdgeInfoProperty道具以便最終打印出prop.score ,我得到了

error C2275: 'ConnGraph::MakeKinectGraph::EdgeInfoProperty' : illegal use of this type as an expression

救命。 這是一個研究項目,如果我不能超越這個,我將無法進入更有趣的部分......

用這個:

G[*ei].score
G[*ei].trans

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM