BGL: Как я могу получить прямой доступ к данным узлов и ребер? - PullRequest
1 голос
/ 01 декабря 2010

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

У меня есть график с разметкой смежности и я использую связанные свойства, чтобы получить доступ к данным узлов и ребер.Для удобства я использую typedef для своего Graph.Таким образом, я могу получить доступ к данным, которые хранятся, например, для 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 карты и конкретного объекта дескриптора.Мои вершины и ребра содержат много данных, поэтому в определенных ситуациях мой текущий код производит много пересчетов одного и того же значения для работы с этими данными.Это кажется уродливым.

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

Ответы [ 2 ]

1 голос
/ 10 февраля 2011

Я использовал связанные свойства и:

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)

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

0 голосов
/ 03 декабря 2010

Вне моей головы, это должно сработать (при условии, что вы используете один из встроенных типов графиков с четко определенным 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

...