2010-06-14 33 views
10

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

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

+0

如果我们能看到你的自定义图形结构的样子,这将有所帮助。 – 2010-06-14 18:17:36

回答

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

+1

我已经阅读了该网站关于让模板工作的大部分BGL文档。然而,如果你不熟悉LEDA,你所展示的例子并不简单,也没有很好的解释。如果你看看他们的代码,它几乎完全没有评论。我在boost图表网站上找到的每一段代码都几乎完全没有评论,对于一个对象来说,这是非常令人沮丧的。 – Michael 2010-06-14 22:15:20

+0

那么,如果你指出你不清楚的具体事情或者与你的图形结构有关的具体问题,那么这将有助于适应变得困难。 – 2010-06-14 22:45:11

+0

够公平的,今天晚些时候会提出编辑 – Michael 2010-06-14 23:38:39

6

我的建议是完全放弃使用BGL的,除非你已经写在它上面的代码显著量。我最近对它进行了测试,以备将来在大型图形分析项目中使用,并且由于过于复杂且设计不佳的API,我发现它几乎无法使用。

在BGL中没有简单的任务,只有复杂的任务,并且由于BGL具有过于复杂的模板层次结构,我一直在与编译器作战。很少有没有有用的文件(至少不是真正需要的地方),没有足够的例子只会加剧问题。这不是编写代码的方法。我想建议切换到LEMON。它稳定,用C++编写,易于理解和编码,提供了几种特殊的图表形式以支持不同的使用需求,它支持BFS和DFS搜索/访问者功能。它也有自己等价的节点/边的属性映射,所以你应该能够将自己的图形结构和其他数据放在它上面。

尝试柠檬;它的味道更好,并且会导致更少的溃疡。 ;-)

+2

我刚刚在一个有100万个节点和1亿个边的图上完成了LEMON测试;很好地缩放,没有性能问题等。 – 2010-06-16 01:08:41

+0

感谢您的想法!不幸的是,我正在使用一个大型的代码库,我不认为我的老板想要另一个依赖:S – Michael 2010-06-16 14:17:48

+1

哦,很高兴听到我不是唯一认为BGL非常复杂和过于笼统的例子,特别暴露! – Michael 2010-06-16 14:21:27