Hello,
I have created a labeled graph:
typedef boost::adjacency_list<boost::vecS, boost::vecS, boost::undirectedS,
Item, Link > UnGraph;
My labels are uint64_t, I want to have my own ids on the graph.
If I add a node: m_g.add_vertex(nodeId, Item(nodeId));
Everything is fine, but there is a bug with find_labeled_vertex.
I want to check if a label is in my graph:
auto BUnGraph::exists( nid source ) const -> bool
{
if( m_g.vertex(source) == UnGraph::null_vertex() )
return false;
else
return true;
}
But the method vertex(source) gives me false results, and returns me a default constructed vertex_descriptor when a node is not in the graph instead of a null_vertex().
I have isolated the method.
labeled_graph.hpp
/** @name Find Labeled Vertex */
//@{
// Tag dispatch for sequential maps (i.e., vectors).
template <typename Container, typename Graph, typename Label>
typename graph_traits<Graph>::vertex_descriptor
find_labeled_vertex(Container const& c, Graph const&, Label const& l,
random_access_container_tag)
{ return l < c.size() ? c[l] : graph_traits<Graph>::null_vertex(); }
I have checked the internal map.
If I add a single node in the graph, map.size() == 42. Instead of 1 !
If I add 5 nodes size() == 248.
So any label number inferior to map.size() will give false results ...
What's going on ?
Thank you.