如何使用 Boost Graph Library 创建 named_graph?

Posted

技术标签:

【中文标题】如何使用 Boost Graph Library 创建 named_graph?【英文标题】:How to create a named_graph with Boost Graph Library? 【发布时间】:2012-05-10 18:43:41 【问题描述】:

我目前正在使用 Boost Graph Library。我需要独特的边缘和顶点。不幸的是,升压图不提供此功能。所以每次插入边或顶点之前,我都必须检查手册。

现在我发现了这个:http://www.boost.org/doc/libs/1_49_0/boost/graph/named_graph.hpp 我想知道这是否对我有帮助?因为文档没有提到 named_graph 我不知道如何使用它。也许周围有人可以给我一个小例子或解释?这对我很有帮助。

提前致谢。

【问题讨论】:

【参考方案1】:

Boost Graph Library 非常灵活,允许您为顶点和边选择内部表示。如果您选择诸如 std::set 之类的容器,则可以直接强制执行唯一的顶点和边。详情在这里:Using Adjacency List

named_graph 类型允许您通过您自己选择的属性(例如代表名称的“字符串”)来索引顶点。它有效地将标准 adjacency_list 包装在一个映射中,其键是命名属性,其值是节点。在 boost 源码named_vertices_test.cpp中有一个很好的例子来说明如何使用它。

不确定您要做什么,但您可以使用 std::map/std::set 将自己从某个唯一属性映射到 adjacency_list 中的节点。如果您只需要在制作时确保图形具有唯一的节点/边,那么这种方法简单明了,通常是最好的方法。

您应该考虑将支持的容器更改为 std::set 的后果——例如,许多算法的性能会发生变化。哪个是最好的容器没有简单的答案。

【讨论】:

以上是关于如何使用 Boost Graph Library 创建 named_graph?的主要内容,如果未能解决你的问题,请参考以下文章

BGL(boost graph Library)(8-)

在 Boost Graph Library 中,为啥添加边会使边迭代器(和其他问题)无效?

当入口和出口指向不同的节点时,如何使用 boost::graph (大约)解决旅行商问题?

如何使用 boost 为图的节点着色

使用Boost Graph库查找连接的组件,顶点和边缘类型为boost :: listS

Boost.Graph - 有 2 个简单的类和一个类 - 数据类型如何创建图表?