1

I have use the boost graph library and read in a graph from a graphml such as this:

<?xml version="1.0" encoding="UTF-8"?>
<graphml xmlns="http://graphml.graphdrawing.org/xmlns"  
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns
   http://graphml.graphdrawing.org/xmlns/1.0/graphml.xsd">
    <graph id="G" edgedefault="directed">
        <node id="A"/>
        <node id="B"/>
        <edge id="0" source="A" target="B">
    </graph>
</graphml>

I have the following C++ function:

using namespace boost;
typedef adjacency_list<vecS, vecS, directedS> BoostGraphType;
typedef dynamic_properties BoostDynamicProperties;

BoostGraphType& g = ...;
BoostDynamicProperties& dp = ...;
read_graphml(is, g, dp);

// get the property map for vertex indices
typedef property_map<BoostGraphType, vertex_index_t>::type IndexMap;
IndexMap index_map = get(vertex_index, g);

typedef graph_traits<BoostGraphType>::vertex_iterator vertex_iter;
for (auto vp = vertices(g); vp.first != vp.second; ++vp.first)
{
    size_t index = index_map[*vp.first];
    // How do I get the id of the node?
}

How can I extract the id of each node, resp. associate the boost vertex_index and "id"-graphml-tag?

Alternatively, how can I identify or map the vertices in my boost graph structure to the vertices in my GraphML file?

Wilbert
  • 7,251
  • 6
  • 51
  • 91
  • 1
    If I understand the code in `read_graphml` correctly (and it is possible/probable that I don't) the "id" tag is only used as a key in a `map` to uniquely identify each vertex and it is never stored in the graph. Assuming this is right you can't do what you want. If you can change the graphml file to include a "vertex_name" property you could do something like [this](http://liveworkspace.org/code/1bz2q8$0). –  Mar 17 '13 at 17:47

0 Answers0