Search code examples
boostgraph

adding custom vertices to a boost graph


If I have n elements defined with class CElement, how can one create vertices of those elements with boost graph - and connect them also? I've seen boost graph bundled props, but I just can't figure this one out.


Solution

  • I don't understand what you want to do exactly. Do you want to associate some data to vertices? Then use bundled properties.

    //Define a class that has the data you want to associate to every vertex and edge
    struct Vertex{ int foo;}
    struct Edge{std::string blah;}
    
    //Define the graph using those classes
    typedef boost::adjacency_list<boost::listS, boost::vecS, boost::directedS, Vertex, Edge > Graph;
    //Some typedefs for simplicity
    typedef boost::graph_traits<Graph>::vertex_descriptor vertex_t;
    typedef boost::graph_traits<Graph>::edge_descriptor edge_t;
    
    //Instanciate a graph
    Graph g;
    
    // Create two vertices in that graph
    vertex_t u = boost::add_vertex(g);
    vertex_t v = boost::add_vertex(g);
    
    // Create an edge conecting those two vertices
    edge_t e; bool b;
    boost::tie(e,b) = boost::add_edge(u,v,g);
    
    
    // Set the properties of a vertex and the edge
    g[u].foo = 42;
    g[e].blah = "Hello world";
    

    The are other ways to set the properties, but there you a have an example to bootstrap.

    I hope I didn't misunderstand the question.