Boost logo

Boost Users :

Subject: [Boost-users] [bgl] depth_first_search does not compile. color_map howto?
From: Joachim Faulhaber (afojgo_at_[hidden])
Date: 2012-06-24 18:14:33


Hi,

When using visitors with the depth_first_search algorithm I can
successfully compile and run this code:

//=========================================================
template<class Graph>
class Visitor: public default_dfs_visitor
{
public:
  typedef typename
    graph_traits<Graph>::vertex_descriptor Vertex;

  void discover_vertex(Vertex v, const Graph& g)const
  {cout << v << " "; return;}
};

void GLV_visit()
{
  typedef adjacency_list<listS, vecS, directedS> GraphLV;
  GraphLV g;
  add_edge(0, 1, g);
  add_edge(0, 2, g);
  add_edge(1, 2, g);
  add_edge(1, 3, g);

  Visitor<GraphLV> vis;
  boost::depth_first_search(g, visitor(vis));
  cout << endl;
}

BOOST_AUTO_TEST_CASE(graph_test)
{
  GLV_visit();
}
//=========================================================

With a slightly different graph (listS instead of vecS for vertices)
the same call of depth_first_search fails to compile with msvc-10.

//=========================================================
struct Int{
  Int(): _value(0){}
  Int(int val): _value(val){}
  int _value;
};

void GLL_visit()
{
  typedef adjacency_list<listS, listS, directedS, Int> GraphLL;
  typedef graph_traits<GraphLL>::vertex_descriptor VertexLL;
  GraphLL g;
  Int val(42);
  VertexLL v0 = boost::add_vertex(g);
  VertexLL v1 = boost::add_vertex(g);
  g[v0] = Int(0);
  g[v1] = Int(1);
  add_edge(v0, v1, g);

  Visitor<GraphLL> vis;
  boost::depth_first_search(g, visitor(vis)); //compile errors
}
//=========================================================

>From the tiny error message of 108 long verbose lines of internal
graph template instantiations (see attachment) it seems that the
compiler is unable to create a default color_map (but I might be wrong
with this interpretation of the template jungle).

1. Do I need to provide a color_map parameter here?
2. If so, what is the simplest way to do that and provide an object of
the appropriate type?

I'd greatly appreciate a working code example. Examples and best
practices for defining and handling external propery maps in general
would be helpful.

TIA,
Joachim

-- 
Interval Container Library [Boost.Icl]
http://www.joachim-faulhaber.de

Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net