
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