[BGL] Trying to use subgraph

I've been trying to work out how to use the subgraph adapter. I've come to realize that in order to use it, my primary graph must *itself* be an object of the subgraph type (unintuitive). However, I'm getting a static assertion error that edge_index is an unknown property. I had *thought* that an adjacency_list<vecS,vecS> would not have that issue, but apparently I was wrong. The page here: http://www.boost.org/doc/libs/1_39_0/libs/graph/doc/subgraph.html says "we add an edge index property to the adjacency list", but the code which follows demonstrates no such thing. The distinction between bundled properties and internal properties is still a bit mysterious to me. Can anyone shed some light on this?

However, I'm getting a static assertion error that edge_index is an unknown property. I had *thought* that an adjacency_list<vecS,vecS> would not have that issue, but apparently I was wrong. The page here: http://www.boost.org/doc/libs/1_39_0/libs/graph/doc/subgraph.html says "we add an edge index property to the adjacency list", but the code which follows demonstrates no such thing.
No it does not. As you've figured out, adjacency_list<vecS, vecS> unfortunately, does not provide a builtin edge_index. As I think about it, adjacency_list<OEL, VL, D, VP, EP, GP, vecS> /may/ have an edge_index (I'm using Caps to denote un-fixed parameters). I'm not certain. If you want to build an edge index into your adjlist, you can do it like this: typedef property<edge_index_t, size_t> EdgeProp; typedef adjacency_list<OEL, vecS, D, VP, EdgeProp> Graph; The distinction between bundled properties and internal properties is still
a bit mysterious to me. Can anyone shed some light on this?
A bundled property is basically just a stucture or class that you associate with a vertex or edge. By supplying a class, you can "bundle" a number of properties together. This is generally thought to be much easier than using the internal properties (of which there is an example written above). struct EdgeBundle { int distance; int resistance; }; typedef adjacency_list<OEL, vecS, D, VP, EdgeBundle> Graph; You can now create property maps over the bundles for use in different generic graph algorithms. Or you can access the bundles as: Graph g; g[e].distance = 3; // e is edge descriptor. Bundled properties are actually converted into interior properties through metaprogramming. If you want to create a class with both interior and bundled properties, you could write: typedef property<edge_index_t, size_t, EdgeBundle> Prop; At least, that should work. Andrew Sutton andrew.n.sutton@gmail.com
participants (2)
-
Andrew Sutton
-
Lindley M French