
On 11/15/05, Stephane Grabli <Stephane.Grabli@imag.fr> wrote:
Hi,
I'm new to the BGL and I'm trying to use the strong_components algorithm, defined this way:
template <class Graph, class ComponentMap, class P, class T, class R> typename property_traits<ComponentMap>::value_type strong_components(Graph& g, ComponentMap comp, const bgl_named_params<P, T, R>& params = all defaults)
with a graph defined like this:
typedef adjacency_list<listS,listS,directedS> Graph;
(in particular using listS for vertices storage).
Does anyone know how I should declare the ComponentMap property map? I couldn't figure this out from the documentation and the examples I've seen all assume that a vecS type storage is used for vertices in the graph. Thanks!
Stephane
Here's one way to do it: (1) declare an interior vertex index map. (2) initialize the interior vertex index map. (3) compose the interior vertex index map with a vector property map. For step (1), just replace your graph declaration with typedef adjacency_list<listS, listS, directedS, property<vertex_index_t, std::size_t> > Graph; For step (2), see the code in the BGL FAQ, #5 (http://tinyurl.com/9skck) For step (3), first #include <boost/vector_property_map.hpp>, then: typedef graph_traits<Graph>::vertices_size_type v_size_t; //the range of ComponentMap vector_property_map< v_size_t, property_map<Graph, vertex_index_t>::type > component_map( num_vertices(g), get(vertex_index,g) ); //g is an instance of Graph Now your component_map is ready to use. I haven't tested this code, of course. Aaron