2010-06-23 12 views
16

Eğer CElement sınıfı ile tanımlanmış elemanlarım varsa, bir tanesi boost grafiğiyle bu elemanların köşelerini nasıl oluşturabilir - ve bunları da nasıl bağlayabilirsiniz? Yükseltilmiş grafik destekli sahne gördüm, ama bunu anlayamıyorum.Bir takviye grafiğine özel köşe noktaları ekleme

+0

. CElements örnekleri köşe noktalarıdır. CElements'ın bu örneklerini ekleyebilmeyi, silmeyebilmeyi, birleştirebilmeyi ve kesmeyi çok isterim. Gerçekten CElement örneğine pt olan struct Vertex'i tanımlamalı mıyım yoksa daha zarif bir yol var mı? – dodol

cevap

50

Tam olarak ne yapmak istediğinizi anlamıyorum. Bazı verileri köşe noktalarıyla ilişkilendirmek ister misiniz? Sonra paketlenmiş özellikleri kullanın.

//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"; 

Özellikleri ayarlamak için başka yollar vardır, ancak orada önyükleme için bir örnek var.

Umarım soruyu yanlış anlamadım. Net olmadığından dolayı üzgünüm

+1

Bence edge_t e = boost :: add_edge (u, v, g) yerine; biri edge_t yazmalı; bool eklendi; boost :: tie (e, eklendi) = güçlendirmek :: add_edge (u, v, g); – dodol

+0

Teşekkürler! –

+2

@Tristram'ın "birlikte verilen özellikleri kullanmaktan daha kolay" olduğunu doğrularım - bu yanıtta tam olarak açıkladığınız * IS * paketli özellikler. =) – wjl

İlgili konular