在我以前的工作场所中,我对Boost的图形库有混合的经验。我不是主要使用该代码的人,但是我们经历了脆性,脚下发生了变化,并且出于不够充分的原因而需要反复刷新状态。是的,我知道这听起来有点夸张,但是重点是我想看看其他方法。

因此,我正在寻找一种图形库,该图形库是:


表示无向图和有向图。
根本不依赖或至少不依赖Boost。
当图是静态的时(即搜索,查找,迭代和
在操作图形时表现出良好的性能-边和顶点的添加,移除,移动和更新。
很好地缩放到大图,但不一定是大图,这是多余的而不是密集的-例如,成千上万的顶点和成千上万的边。
不要对非常不均匀的顶点递减不屑一顾。
友好地使用附加语义丰富边和顶点(是的,含糊这里不是要事先排除答案)。
免费且开源。
用C ++ 11和更高版本编写...您知道吗?好的,不是严格的要求,但是我会对这些有很大的偏见。

如果还可以,那就也很好:


很好地缩放到巨大的图形。
在稀疏图和稠密图上表现良好。
使您可以根据性能目标配置其基础表示。
malloc()就像没有那样的东西之一明天,让您陷入迷宫般的指针迷宫中。
没有那么病毒的许可证。
正在积极维护。
有据可查。
被广泛使用。


评论

还有dlib

@Antony:我不认为这能满足我的所有要求...

抱歉,当我发表评论而不是回答时,我同样担心。我已经使用了Boost Graph Library一点,所以我感觉到您的痛苦:-(

#1 楼

到目前为止,还没有人回答。似乎没有多少人经常访问此站点上的C ++库请求页面。无论如何,我现在将在此答案中添加一些潜在的候选者或接近候选者:

可能相关:



LEMON或网络中有效建模和优化的库-“ C ++模板库,提供常见数据结构和算法的有效实现,重点是主要与图和网络连接的组合优化任务。”这是2010年的演讲,描述了LEMON。

GGL,图形语法库-。这是手册。

地精-“处理图形的工具链”,包括图形相关的组合优化算法的代码;在空间中布置图(例如分层图,正交图),图组成(?),文件之间的序列化,顶点和边属性以及入射结构。

SNAP-斯坦福网络分析平台-一方面似乎非常专注于特定的应用程序;另一方面,它可能不是C ++ 11ish。另一方面,它可能具有非常完整的图形表示和操作API。还有一个提示,它可能基于另一个较低级别的图形库。

NGraph-超简单的单个23 KiB .hpp文件图形库。

digraph-用于Digraph的C ++ 11库,旨在用作Faust音频信号处理编译器的一部分。

不相关/不完全相关:



LEDA-包含相同名称的组合算法和数据结构的较大代码库的一部分。这是商业软件,甚至免费版也是封闭源代码(您可以-喘着气-从他们那里购买源代码)。不用了,谢谢。

OGDF-开放式图形绘图框架-似乎更关心平面图上的布局,图形绘制。自称是LEDA的FOSS替代品。

igraph-为在网络分析中使用而创建的C语言(例如:不是C ++)。声称专注于大型但非大型图形的性能;而且似乎已经有十多年的发展了。 GitHub页面。它具有一些名为igraphpp的不稳定API C ++绑定。

NoCycle-DAG表示形式的库。它使用邻接表的紧凑(?)表示形式。可能与我所需的内容差异太大,并且我不认为我“购买”了有关其表示的炒作。

libcgraph-GraphViz图形布局项目/工具包的一部分。请注意,这里还有一个名为libgraph的组件-不确定使用哪个组件。

GCT-图形类模板-另一个单头文件准系统库。

这不是不可能的一些C库很好,但是我不认为我会花时间将它们包装在C ++中,更不用说它们可以有效使用的抽象性不足了。

另请参阅以下StackOverflow问题:


使用图形库/节点网络库还是自己编写?
我应该使用哪个C ++图形库?