2010-06-23 13 views
16

Si tengo n elementos definidos con la clase CElement, ¿cómo se pueden crear vértices de esos elementos con el gráfico de impulso y conectarlos también? He visto impulsar utilería gráfica, pero no puedo entender esto.agregar vértices personalizados a un gráfico de impulso

+0

lo siento por no ser claro. Las instancias de los elementos CE son vértices. Me gustaría poder agregar, eliminar, conectar y desconectar esas instancias de CElements. ¿Realmente necesito definir struct Vertex que tenga pt a instancia de CElement o hay una manera más elegante? – dodol

Respuesta

50

No entiendo exactamente lo que quiere hacer. ¿Quieres asociar algunos datos a los vértices? Luego usa propiedades agrupadas.

//Define a class that has the data you want to associate to every vertex and edge 
struct Vertex{ int foo;} 
struct Edge{std::string blah;} 

//Define the graph using those classes 
typedef boost::adjacency_list<boost::listS, boost::vecS, boost::directedS, Vertex, Edge > Graph; 
//Some typedefs for simplicity 
typedef boost::graph_traits<Graph>::vertex_descriptor vertex_t; 
typedef boost::graph_traits<Graph>::edge_descriptor edge_t; 

//Instanciate a graph 
Graph g; 

// Create two vertices in that graph 
vertex_t u = boost::add_vertex(g); 
vertex_t v = boost::add_vertex(g); 

// Create an edge conecting those two vertices 
edge_t e; bool b; 
boost::tie(e,b) = boost::add_edge(u,v,g); 


// Set the properties of a vertex and the edge 
g[u].foo = 42; 
g[e].blah = "Hello world"; 

Las otras formas de establecer las propiedades, pero hay un ejemplo para arrancar.

Espero no haber malinterpretado la pregunta.

+1

Creo que en lugar de edge_t e = boost :: add_edge (u, v, g); uno debe escribir edge_t e; bool agregado; boost :: tie (e, agregado) = boost :: add_edge (u, v, g); – dodol

+0

¡gracias! Corrijo que –

+2

@Tristram "es más fácil que utilizar las propiedades agrupadas": lo que usted ha descrito en esta respuesta es exactamente * propiedades * IS * bundled. =) – wjl

Cuestiones relacionadas