簡體   English   中英

bgl中的edge_descriptor映射

[英]edge_descriptor mapping in bgl

我是BGL的新手,我在創建自己的屬性貼圖時遇到問題,其關鍵是edge_property

你可以告訴我,我做錯了以下代碼不打印:(0,1)==(0,1)? 1但是(0,1)==(0,1)? 0

這是代碼

#include <boost/graph/adjacency_list.hpp>
#include <iostream>
#include <map>

using namespace std;


class A {};
class B {};

typedef boost::adjacency_list<boost::listS, boost::vecS, boost::bidirectionalS,
                                    A, B > Graph;

typedef boost::graph_traits<Graph>::vertex_descriptor vertex_descriptor;
typedef boost::graph_traits<Graph>::edge_descriptor edge_descriptor;
typedef boost::graph_traits<Graph>::edge_iterator edge_iterator;
typedef boost::graph_traits<Graph>::in_edge_iterator in_edge_iterator;
typedef boost::graph_traits<Graph>::out_edge_iterator out_edge_iterator;

map<edge_descriptor, int>  fun(Graph g){

    map<edge_descriptor, int> m;
    m[*(edges(g).first)] = 5;
    return m;
}


int main(){
    Graph g;

    vertex_descriptor a = add_vertex(g);
    vertex_descriptor b = add_vertex(g);

    add_edge(a, b, g);

    map<edge_descriptor, int> m = fun(g);

    edge_iterator ei, ei_end;
    for(tie(ei, ei_end) = edges(g) ; ei !=ei_end ; ++ei){
        cout << m.begin()->first << " == " << *ei << " ? " << (m.begin()->first == *ei) << endl;
    }
}

非常感謝你!

編輯:也許有更好的方法來映射edge而不是edge_property值?

邊緣描述符有3個成員:源節點,目標節點和指向B屬性的指針。 在你的fun你可以復制你的圖形,並且新圖形中復制的邊緣指向不同的B.如果你將你的fun聲明為map<edge_descriptor, int> fun(const Graph& g) (你可能應該從更大圖表的副本可能很昂貴)您獲得了預期的結果。

暫無
暫無

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

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