2011-09-30 43 views
5

我正在使用捆綁屬性和adjacency_list並希望使用子圖類。Boost子圖和捆綁屬性

struct Vertex 
{ 
    int index; 
    int seed; 
}; 

struct Edge 
{ 
bool visted; 
double weight; 
}; 

typedef adjacency_list<listS, listS, undirectedS, Vertex, property<edge_index_t,int,Edge> > Graph; 
typedef subgraph<Graph> testSubgraph; 

property<edge_index_t,int,Edge>部分是必要的,作爲子圖需要edge_index_t到兩個邊緣進行比較。

現在我的問題是如何在Subgraph中使用捆綁屬性添加Edge? 在正常曲線不property<edge_index_t,int,Edge>我加一個邊緣如下:

Edge e; 
vertex_descriptor u,v; 
// fill in u and v; 
e.weight = 1.0; 
e.visted=false; 
add_edge(u,v,e,graph); 

但是,這並不爲子圖工作。

希望有人知道這個解決方案。

感謝

回答

1

鄰接表沒有edge_index:ES。您需要自己分配一個索引,但這與向Edge添加size_t index以及在創建邊時分配索引一樣簡單。

您可能不需要爲子圖創建邊,因爲增強子圖是誘導子圖。因此,圖中兩個端點都在子圖中的所有邊將包含在子圖中。

+1

如果我只是將size_t索引添加到我的Edge結構中,它仍然不會找到此索引,因爲它在'propertey '中需要 – Ben

0

我只是碰到了嘗試添加與add_vertex()功能的頂點時,類似的問題,並發現有對升壓錯誤追蹤一個(很老)懸而未決的問題:

Ticket #380: Support for bundled properties in graph adaptors

圖形適配器(如子圖)不支持捆綁的 屬性,但它們應該。


進一步尋找導致以下2個補丁,其中尚未合併,但似乎最終實現了捆綁性質的子圖的支持:

所以我想答案是:現在,不要使用捆綁的屬性。但在未來,這個問題應該消失。