C++ Boost图形库:如何使用深度?首次访问,彩色地图问题

C++ Boost图形库:如何使用深度?首次访问,彩色地图问题,c++,boost,boost-graph,C++,Boost,Boost Graph,初始问题: 我正在尝试使用boost::depth\u first\u visit,但不知道如何提供ColorMap属性。我尝试了下面示例中给出的方法: 我的(相关)代码: ///定义顶点属性。 结构节点属性 { 未签名的id;///id。 未签名的种类;///种类。 无符号深度;///深度。 未签名的图层颜色;///图层颜色。 无符号信号颜色;///信号颜色。 无符号sch_color;///sch color。 CBoundingBox边界;///边界。 节点属性() :id(0)、种类(0

初始问题:

我正在尝试使用boost::depth\u first\u visit,但不知道如何提供ColorMap属性。我尝试了下面示例中给出的方法:

我的(相关)代码:

///定义顶点属性。
结构节点属性
{
未签名的id;///id。
未签名的种类;///种类。
无符号深度;///深度。
未签名的图层颜色;///图层颜色。
无符号信号颜色;///信号颜色。
无符号sch_color;///sch color。
CBoundingBox边界;///边界。
节点属性()
:id(0)、种类(0)、深度(0)、图层颜色(0)、信号颜色(0)、颜色(0)、边界(0,0,0,0)
{
;
}
};
///定义网络拓扑图。
typedef boost::邻接列表图;
///定义顶点+迭代器。
typedef boost::graph_traits::vertex_描述符顶点;
typedef boost::graph_traits::vertex_迭代器VertexItr;
///定义边+迭代器。
typedef boost::graph_traits::edge_描述符edge;
typedef boost::graph_traits::edge_迭代器EdgeItr;
类接收者\u访问者:public boost::default\u dfs\u访问者
{
公众:
接受者和来访者(标准::向量和r)
:recv(r)
{
;
}
void discover_顶点(顶点v,图常数&g)常数
{
std::cout g,
src,
访客(vis),
boost::make_iterator_property_map(color_map.begin(),boost::get(boost::vertex_index,data_u->g),color_map[0]);
返回recv;
}
我得到了编译错误,下面我不知道如何修复。有什么想法吗

/p/dt/cad/em64t_SLES11/boost/1.58.0_gcc472_64/include/boost/graph/depth_first_search.hpp: In instantiation of 'void boost::depth_first_visit(const IncidenceGraph&, typen
        ame boost::graph_traits<Graph>::vertex_descriptor, DFSVisitor, ColorMap) [with IncidenceGraph = boost::adjacency_list<boost::vecS, boost::vecS, boost::bidirectionalS, tr
        on::les::NodeProperty>; DFSVisitor = boost::bgl_named_params<tron::les::receiver_visitor, boost::graph_visitor_t, boost::no_property>; ColorMap = boost::iterator_propert
        y_map<__gnu_cxx::__normal_iterator<boost::default_color_type*, std::vector<boost::default_color_type> >, boost::vec_adj_list_vertex_id_map<tron::les::NodeProperty, long 
        unsigned int>, boost::default_color_type, boost::default_color_type&>; typename boost::graph_traits<Graph>::vertex_descriptor = long unsigned int]':
        NetTopology.cpp:353:139:   required from here
        /p/dt/cad/em64t_SLES11/boost/1.58.0_gcc472_64/include/boost/graph/depth_first_search.hpp:341:5: error: 'struct boost::bgl_named_params<tron::les::receiver_visitor, boost
        ::graph_visitor_t, boost::no_property>' has no member named 'start_vertex'
             vis.start_vertex(u, g);
/p/dt/cad/em64t\u SLES11/boost/1.58.0\u gcc472\u 64/include/boost/graph/depth\u first\u search.hpp:void boost::depth\u first\u visit(const IncidenceGraph&,typen)实例化
ame boost::graph_traits::vertex_描述符,DFSVisitor,ColorMap)[带有IncidenceGraph=boost::邻接列表;DFSVisitor=boost::bgl_命名参数;ColorMap=boost::iterator_属性
y_map;typename boost::graph_traits::vertex_descriptor=long unsigned int]':
NetTopology.cpp:353:139:从这里开始需要
/p/dt/cad/em64t_SLES11/boost/1.58.0_gcc472_64/include/boost/graph/depth_first_search.hpp:341:5:错误:“struct boost::bgl_named_params”没有名为“start_vertex”的成员
可视起始顶点(u,g);

您最初使用的
深度优先搜索的重载是:

template <class Graph, class class P, class T, class R>
void depth_first_search(Graph& G,
  const bgl_named_params<P, T, R>& params);
第一个已使用,因此需要使用
boost::visitor(vis).root\u vertex(src)
(或者
boost::root\u vertex(src).visitor(vis)
,或者如果要使用默认的开始顶点,只需使用
boost::visitor(vis)
)。由于
depth\u first\u visit
不使用它们,您需要删除对
boost::visitor(…)
的调用,并直接传递
vis

boost::depth_first_visit(data_->g,
                               src,
                               vis,
                        boost::make_iterator_property_map(color_map.begin(), boost::get(boost::vertex_index, data_->g), color_map[0]));
template <class IncidenceGraph, class DFSVisitor, class ColorMap>
void depth_first_visit(IncidenceGraph& g,
  typename graph_traits<IncidenceGraph>::vertex_descriptor s, 
  DFSVisitor& vis, ColorMap color);
boost::depth_first_visit(data_->g,
                               src,
                               vis,
                        boost::make_iterator_property_map(color_map.begin(), boost::get(boost::vertex_index, data_->g), color_map[0]));