将boost :: depth_first_search与Visitor一起使用

时间:2011-01-16 17:22:45

标签: c++ boost depth-first-search boost-graph

正如标题所示,我正在使用boost::depth_first_search并使用访问者(继承自boost::default_dfs_visitor)来实现某种算法。

但是,在算法运行期间,我想在访问者中保存一些信息,以后再查询。但是,在DFS完成后,信息将被删除,因此我假设它使用了副本。除了使用所有私有变量的指针之外,有没有办法防止这种情况并使boost使用我的副本?

2 个答案:

答案 0 :(得分:2)

您可以尝试将访问者传递到boost::reference_wrapper

编辑 - 代码

YourVisitorClass your_visitor;
boost::depth_first_search(your_graph, boost::ref(your_visitor), 
                          your_color_map);

boost::ref(your_visitor)返回boost::reference_wrapper<YourVisitorClass>。当depth_first_search创建该参数的副本时,它将复制reference_wrapper而不是visitor对象。引用的副本将引用与原始实例相同的实例。

答案 1 :(得分:1)

信息是访客的一部分真的有意义吗?

我的猜测是信息在逻辑上属于图表,应该存储在那里,而不是存储在访客中。

您可以在访问者中存储对图表的引用。然后,当访问者遍历图表时,它可以更新与图表一起存储的信息。

结果是,在完成工作后可以销毁访问者,因为结果将作为图表的一部分保留。