如何将自定义图形适合增强图库模板?

Mic*_*ael 10 c++ templates graph boost-graph data-structures

我在C++模板上生锈了,我正在使用boost图库(致命的组合).我在网上搜索过,找不到关于如何采用自定义图形结构的任何直接指令,并且足够适合BGL(boost图形库),我可以使用增强图遍历算法.有没有熟悉图书馆帮助我的人?

编辑:所以,我一直遇到的主要问题是在哪里找到一个源,其中将任意图映射到BGL图的总要求.我是模板的新手,所以我很难阅读BGL的规范/示例.也许我应该寻找模板的一般来源?

Joe*_*off 6

我的建议是完全放弃使用BGL,除非你已经有大量的代码写在它上面.我最近测试它是为了将来用于大型图形分析项目,我发现它几乎无法使用,因为API过于复杂且设计不佳.

BGL中没有简单的任务,只有复杂的任务,而且由于BGL具有过于复杂的模板层次结构,我一直在与编译器作斗争.几乎没有有用的文档(至少不是它真正需要的地方)而且没有足够的例子只会加剧问题.这是无法编写代码的方法.

我建议切换到LEMON.它是稳定的,用C++编写,易于理解和编写,提供了几种专用形式的图形来支持不同的使用需求,它支持BFS和DFS搜索/访问者功能.它还有自己的等效节点/边的属性映射,因此您应该能够将自己的图形结构和其他数据放在其上.

试试LEMON; 它味道好多了,会减少溃疡.;-)

  • 我刚刚在一个有100万个节点和1亿个边缘的图表上测试了LEMON; 很好地扩展,没有性能问题,等等. (2认同)

Owe*_* S. 5

据我所知,这种方法是专门boost::graph_traits针对图表类型的结构.这为BGL配置了它需要了解的关于图形的各种重要属性.然后,您可以为图形的专用类型专门化全局模板函数,graph_traits以实现可能适用于您的特定图形类型的任何增强图形接口.

BGL文档就是一个例子:

http://www.boost.org/doc/libs/1_43_0/libs/graph/doc/leda_conversion.html

那里有几个不同接口的链接,如果你想支持那个接口,它们表明你需要专门为你的图形设置哪些全局模板函数.完整的接口列表如下:

http://www.boost.org/doc/libs/1_43_0/libs/graph/doc/graph_concepts.html