2010-12-01 4 views
1

J'ai un autre problème concernant la bibliothèque graphique Boost à laquelle je ne pouvais pas me répondre en recherchant sur Google ou en lisant la documentation. Ce n'est pas directement lié à mes autres questions, alors j'ai pensé que je devrais commencer un nouveau sujet.BGL: Comment obtenir un accès direct aux données des nœuds et des arêtes?

J'ai un graphique avec une disposition d'adjacence et j'utilise des propriétés groupées pour accéder aux données des nœuds et des arêtes. J'utilise un typedef pour mon graphique pour plus de commodité. Ainsi, je peux accéder aux données qui sont stockées, par ex. pour un vertex_descriptor, en tapant quelque chose comme ceci:

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

Maintenant, je voudrais définir une référence à l'objet de stockage de données pour être en mesure de taper quelque chose comme ça:

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

Par cette ou une approche similaire Je cherche à éviter les recalculs inutiles de la valeur mappée qui est accessible en utilisant le []operator de la carte et un objet descripteur spécifique. Mes sommets et arêtes contiennent beaucoup de données. Dans certaines situations, mon code actuel génère de nombreux recalculs de la même valeur pour traiter ces données. Cela semble être moche.

Est-ce que quelqu'un sait s'il est possible de réaliser ce que j'essaie de faire?

Répondre

0

Du haut de ma tête, cela devrait fonctionner (en supposant que vous utilisez l'un des types intégrés de graphique avec un bien défini graph_traits):

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

vous pouvez réellement accéder à beaucoup de cette façon, prendre un regard sur les concepts graphiques de BGL pour plus d'info: http://www.boost.org/doc/libs/1_45_0/libs/graph/doc/graph_concepts.html

1

J'utilisé les propriétés et empaquetés:

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) 

pour obtenir la propriété fourni directement ly.

+0

Le fait devrait être au-dessus: 'Bundled_vertex_property prop_v = get (vertex_bundle, my_graph, vertex_descriptor)' ' Bundled_edge_property prop_e = get (edge_bundle, my_graph, vertex_descriptor)' Notez également que '' edge_bundle' et vertex_bundle' ne sont pas des variables, ce sont des descripteurs prédéfinis. –

Questions connexes