现代(ish)C++图形表示和操作库

软件推荐 开源的 图书馆 C++ 图表
2021-10-20 01:09:45

在我以前的工作场所,我对Boost的图形库有过不同的体验。我不是主要使用该代码的人,但是我们经历了脆弱性,我们脚下的事情发生了变化,并且由于不够好的原因需要反复刷新状态。是的,我知道这听起来有点含糊,但关键是我想看看替代方案。

所以,我正在寻找一个图形库:

  • 表示无向图和有向图。
  • 完全不依赖于 Boost,或者至少不依赖于 Boost。
  • 在图形是静态的(即搜索、查找、使用和不使用过滤器的迭代等)时都表现出良好的性能。
  • 在操作图形时表现出良好的性能 - 边和顶点的添加、删除、移动和更新。
  • 可以很好地扩展到大型但不一定是备用而不是密集的大型图- 例如,数万个顶点和数十万条边。
  • 在非常不均匀的顶点度数上不会犹豫。
  • 友好地使用额外的语义来丰富边缘和顶点(是的,再次,这里含糊不清,不预先排除答案)。
  • 免费和开源
  • 是用C++11及更高版本编写的……你知道吗?好的,不是一个严格的要求,但我会非常偏向那些。

如果它也可以:

  • 可以很好地扩展到巨大的图表。
  • 在稀疏图和密集图上表现良好。
  • 允许您将其基础表示配置为您的性能目标。
  • 不是 malloc() 的事情之一,就像没有明天,让你被困在令人讨厌的指针迷宫中。
  • 有一个不那么病毒的许可证。
  • 被积极维护。
  • 有据可查。
  • 被广泛使用。
1个回答

一些潜在的候选人或接近候选人:

可能相关:

  • LEMONL ibrary for E fficient Modeling and O optimization in Network -“ C ++ 模板库,提供常见数据结构和算法的有效实现,重点关注主要与图形和网络相关的组合优化任务。” 这是描述 LEMON的2010 年演示文稿。
  • GGLG raph G语法图书馆- . 这是手册
  • Goblin - “处理图形的工具链”,包括图形相关组合优化算法的代码;在空间中布局图(例如分层、正交)、图组合(?)、序列化到/从文件、顶点和边属性以及关联结构。可能不是 C++11ish,也不是过多地涉及模板。
  • SNAP - S tanford网络分析平台-一方面,似乎非常专注于特定应用;另一方面,它可能有一个非常完整的图形表示和操作 API。还有一个提示,它可能基于另一个较低级别的图形库。
  • NGraph - 一个超级简单的 23 KiB .hpp 文件,图形库。
  • digraph - 用于有向图的 C++11 库,适合用作Faust音频信号处理编译器的一部分。

不相关/不太相关:

  • LEDA - 更大的组合算法和同名数据结构代码库的一部分。这是商业软件,甚至免费版也是封闭源代码(你可以 - 喘不过气来 - 从他们那里购买源代码)。不,谢谢。
  • OGDF - O pen G raph D rawing F ramework - 似乎更关注布局,在平面上绘制图形。声称是 LEDA 的 FOSS 替代品。
  • igraph - 创建用于网络分析的 AC(如:非 C++)图形库。声称专注于大型但不是巨大的图表的性能;并且似乎在十多年来取得了显着发展。GitHub 页面它有一些名为 igraphpp的不稳定 API C++ 绑定。
  • NoCycle - DAG 表示的库。它使用邻接图的紧凑 (?) 表示。可能与我需要的太不同了,我认为我不会“购买”关于它的表现的炒作。
  • libcgraph - GraphViz图形布局项目/工具包的一部分。请注意,其中还有一个名为 libgraph 的组件 - 不确定哪个使用哪个。
  • GCT - G raph C lass T模板 - 另一个单头文件准系统库。

某些 C 库很好,这并非不可能,但我认为我不会花时间将它们包装在 C++ 中,更不用说它们缺乏有效可用的抽象了。

另请参阅以下堆栈溢出问题: