
Hi all! I'm new at using boost and my request certainly is obvious but I can't manage to get the error... I am trying to set std::vector's type vertex properties in a graph. But it does not want te set a property to more than one edge. The program is the following: /****************************************code*****************************/ #include <vector> #include <iostream> #include <list> #include <map> //boost includes #include <boost/property_map.hpp> #include <boost/graph/graph_traits.hpp> #include <boost/graph/properties.hpp> #include <boost/graph/adjacency_list.hpp> #include <boost/graph/adjacency_matrix.hpp> using namespace std; enum edge_intersec_t { edge_intersec }; enum edge_dist_t { edge_dist }; enum vertex_param_t { vertex_param}; namespace boost { BOOST_INSTALL_PROPERTY(edge, intersec); BOOST_INSTALL_PROPERTY(edge, dist); BOOST_INSTALL_PROPERTY(vertex, param); } using namespace boost; typedef property<edge_intersec_t, unsigned int, property<edge_dist_t,float> > EdgeProp; typedef property<vertex_param_t,std::vector<float> > VertexProp; typedef adjacency_list<setS,vecS, bidirectionalS,VertexProp,EdgeProp> Graph; typedef graph_traits<Graph>::edge_descriptor edge_descriptor; int main(int argc, char** argv) { int NbRegions = 9; Graph g(NbRegions); edge_descriptor e; bool inserted; tie(e,inserted) = add_edge(vertex(0,g),vertex(1,g),EdgeProp(0,20),g); tie(e,inserted) = add_edge(vertex(0,g),vertex(2,g),0,g); tie(e,inserted) = add_edge(vertex(1,g),vertex(2,g),0,g); tie(e,inserted) = add_edge(vertex(3,g),vertex(4,g),0,g); tie(e,inserted) = add_edge(vertex(3,g),vertex(5,g),0,g); tie(e,inserted) = add_edge(vertex(3,g),vertex(7,g),0,g); tie(e,inserted) = add_edge(vertex(4,g),vertex(5,g),0,g); tie(e,inserted) = add_edge(vertex(5,g),vertex(6,g),0,g); tie(e,inserted) = add_edge(vertex(1,g),vertex(4,g),50,g); tie(e,inserted) = add_edge(vertex(1,g),vertex(3,g),100,g); tie(e,inserted) = add_edge(vertex(0,g),vertex(4,g),200,g); tie(e,inserted) = add_edge(vertex(2,g),vertex(5,g),500,g); tie(e,inserted) = add_edge(vertex(2,g),vertex(6,g),20,g); tie(e,inserted) = add_edge(vertex(2,g),vertex(4,g),50,g); tie(e,inserted) = add_edge(vertex(0,g),vertex(3,g),50,g); std::vector<float> param(2); std::vector<float> propriete(2); param[0] = 800; std::cerr<<"param[0] = "<<param[0]<<std::endl; param[1] = 20; std::cerr<<"param[1] = "<<param[1]<<std::endl; put(vertex_param,g,vertex(0,g),param); propriete = get(vertex_param,g,vertex(0,g)); std::cout<<"propriete[0]: "<<propriete[0]<<", propriete[1]: "<<propriete[1]<<std::endl; param.clear(); param[0] = 2; std::cerr<<"param[0] = "<<param[0]<<std::endl; param[1] = 50; std::cerr<<"param[1] = "<<param[1]<<std::endl; put(vertex_param,g,vertex(1,g),param); propriete = get(vertex_param,g,vertex(1,g)); std::cout<<"propriete[0]: "<<propriete[0]<<", propriete[1]: "<<propriete[1]<<std::endl; return 0; } /************************************************************************/ it compiles and executes, but the property of the second vertex has not been asigned. Here is the result it gives: /***************command window*************************************/ param[0] = 800 param[1] = 20 propriete[0]: 800, propriete[1]: 20 param[0] = 2 param[1] = 50 propriete[0]: 800, propriete[1]: 20 /**************************************************************************/ I tried without using "propriete" but directly"get(vertex_param,g,vertex(1,g)) [0]", and it gives a segmentation fault during the execution which confirms that the vertex property has not been asigned to the second vertex. Thanks! Camille.