2011-09-30 39 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个补丁,其中尚未合并,但似乎最终实现了捆绑性质的子图的支持:

所以我想答案是:现在,不要使用捆绑的属性。但在未来,这个问题应该消失。