开发者

Boost Graph edges with indexes

开发者 https://www.devze.com 2023-03-22 18:16 出处:网络
I am trying to define a graph with undirected edges from a set of pair(int,int) edges (where each int represents a vertex index). Each such edge has an index of its own.

I am trying to define a graph with undirected edges from a set of pair(int,int) edges (where each int represents a vertex index). Each such edge has an index of its own.

The catch is that I want that the internal vertex index of the graph will be consistent with the original vertex indexes. I also like to be able to extract the original edge index from an edge descriptor.

From http://www.boost.org/doc/libs/1_47_0/libs/graph/doc/using_property_maps.html (Exterior Properties section) I understand that I should use the following graph type:

typedef adjacency_list<vecS, vecS, udirectedS, 
no_property, property<edge_index_t, std::size_t> 开发者_开发技巧> Graph;

Unfortunately there's no explanation on how to use edge_index_t property.

It's clear that I could just use a map(pair(int,int),int) but I'm looking for a more elegant boost oriented solution.

Thank you, Kiril


Since you use vectors to define collection of vertices there is one-to one correspondence between vertex indices and vertex descriptors. You just need to define you graph object as follows:

Graph g(N);

Where N is number of vertices. This allocates N vertices, each vertex descriptor is a number from 0 to N-1.

To get edge index from the edge descriptor you can use get function: get(edge_index, g, edge_descriptor);. The edge descriptor you can get from iterators returned by adjacent_vertices(v, g) function.

Hope it what you've meant.

0

精彩评论

暂无评论...
验证码 换一张
取 消