Hi,
Thanks for replying. The problem, and that may seem too simple or silly to
people familiar with the library, is that I have no idea what should be the
type of the component map to pass. I tried to declare the components variable
as:
vector< graph_traits<FeatureGraph>::vertices_size_type >
components(num_vertices(g));
And it does not work either. What is the type of the component map, the
second argument of connected_components? Can you give me an example of a type
that would work (compile and return the correct results)?
Try:
shared_array_property_map<
...::vertices_size_type,
property_map::const_type
components(num_vertices(g), get(vertex_index, g));
This requires a vecS vertex container, though.
-- Jeremiah Willcock
Ok, I understand now that vertex_descriptor are integers if one uses a
vecS for the vertex list. I have changed the type of my undirected graph
to boost::adjacency_list and used a simple
vectorFeatureGraph::vertex_descriptor for the component map and it
works nicely.
Another question is about efficiency: what are the
advantages/disadvantages to use vecS or listS for the list of vertices?
Finally, how could I modify my initial code to make it work?
#include
#include
#include
using namespace boost;
using namespace std;
struct FeatureTrajectory {
int id;
};
struct FeatureConnection {
float minDistance;
float maxDistance;
};
struct VertexInformation {
shared_ptr<FeatureTrajectory> feature;
};
typedef adjacency_list < listS, listS, undirectedS, VertexInformation,
FeatureConnection> FeatureGraph;
int main() {
FeatureGraph g;
FeatureGraph::vertex_descriptor u, v;
FeatureGraph::edge_descriptor e;
u = add_vertex(g);
v = add_vertex(g);
bool unused;
tie(e, unused) = add_edge(u, v, g);
g[e].minDistance = 0.;
g[e].maxDistance = 1.;
g[u].feature = shared_ptr<FeatureTrajectory>(new FeatureTrajectory());
g[u].feature->id =11;
g[v].feature = shared_ptr<FeatureTrajectory>(new FeatureTrajectory());
g[v].feature->id =12;
cout << num_vertices(g) << " " << num_edges(g) << endl;
vector_property_map< graph_traits<FeatureGraph>::vertices_size_type >
components(num_vertices(g));
int num = connected_components(g, &components[0]);
return 0;
}
I really find it difficult to find the information to use property maps
in the library: is there a tutorial or a more step by step documentation
somewhere?
Thanks again!
Nicolas
--
Nicolas Saunier, ing. jr, Ph.D.
Professeur Adjoint / Assistant Professor
Département des génies civil, géologique et des mines (CGM)
École Polytechnique de Montréal
http://nicolas.saunier.confins.net