отображение edge_descriptor в 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_property?

3

Решение

Ваш дескриптор края имеет 3 члена: исходный узел, целевой узел и указатель на ваше свойство B. В вашем fun Вы делаете копию своего графа, и скопированный край в вашем новом графе указывает на другой B. Если вы объявляете fun как map<edge_descriptor, int> fun(const Graph& g) (и вы, вероятно, должны, так как копия большого графика может быть дорогой), вы получите ожидаемый результат.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector