2010-12-01 3 views
1

У меня есть еще одна проблема, связанная с графической библиотекой Boost, которую я не мог ответить сам по поиску или чтению документации. Это не связано напрямую с моими другими вопросами, поэтому я подумал, что лучше начать новую тему.BGL: Как получить прямой доступ к данным узлов и ребер?

У меня есть график с расположением смежности и использование связанных свойств, чтобы получить доступ к данным узлов и ребер. Для удобства я использую typedef для моего графика. Таким образом, я могу получить доступ к данным, которые хранятся, например. для vertex_descriptor, набрав что-то вроде этого:

Graph[my_vertex_descriptor].setX(4); 
Graph[my_vertex_descriptor].setY(10); 

Теперь я хотел бы определить ссылку на объект данных, хранящих, чтобы иметь возможность ввести что-то подобное:

typedef Graph[vertex_descriptor]::type Vertex; 
Vertex v = Graph[my_vertex_descriptor]; 
v.setX(4); 
v.setY(10); 

К этому или аналогичный подход я стараюсь избежать ненужных пересчетов отображаемого значения, к которому обращаются, используя []operator карты и конкретный объект дескриптора. Мои вершины и ребра содержат много данных, поэтому в некоторых ситуациях мой текущий код производит много пересчетов одинакового значения для обработки этих данных. Это кажется уродливым.

Кто-нибудь знает, возможно ли достичь того, что я пытаюсь сделать?

ответ

0

Off верхней части моей головы, это должно работать (если вы используете один из встроенных типов графов с хорошо определенным graph_traits):

typedef boost::graph_traits<Graph>::vertex_descriptor Vertex; 
Vertex v = Graph[my_vertex_descriptor]; 
v.setX(4); 
v.setY(10); 

вы можете получить доступ ко таким образом, принять взгляд на понятиях графа BGL для получения дополнительной информации: http://www.boost.org/doc/libs/1_45_0/libs/graph/doc/graph_concepts.html

1

Я использовал в комплекте свойства и:

Bundled_vertex_property prop_v = get(vertex_bundle, my_graph) // or get(vertex_bundle, v, my_graph) 
Bundled_edge_property prop_e = get(edge_bundle, my_graph) // or get(edge_bundle, v, my_graph) 

, чтобы получить комплектную собственность прямой LY.

+0

выше должно быть на самом деле: `Bundled_vertex_property prop_v = прибудете (vertex_bundle, my_graph, vertex_descriptor)` ` Bundled_edge_property prop_e = прибудете (edge_bundle, my_graph, vertex_descriptor)` отметить также, что `` edge_bundle` и vertex_bundle` не являются переменными, они являются предопределенными дескрипторами. – 2012-11-18 00:40:51

 Смежные вопросы

  • Нет связанных вопросов^_^