2

我正在尝试使用 Boost Graph Library 创建一些特定的结构。我需要有输入和输出端口的节点(顶点)。每个输出端口可以连接到其他节点的任何输入端口。我希望能够检查特定的输出或输入端口是否连接到任何其他端口。

这个想法是在 adjacency_list 中使用 std::map 作为 OutEdgeList。

根据:http ://www.boost.org/doc/libs/1_52_0/libs/graph/doc/using_adjacency_list.html#sec: choosing-graph-type 我只能选择 std::vector 之一, std::list、std::slist、std::set、std::multiset 和 std::hash_set。(您可以选择 mapS 作为一种类型,但它是作为 std::set 实现的,我无法通过键获取值)

我有几个问题:

  1. 可以使用 std::map 吗?如果是怎么办?
  2. 使用 std::map 时如何遍历顶点的输入?
  3. 如果以上是不可能的,我该如何实现适合该问题的结构?

谢谢!

4

2 回答 2

2

我终于切换到了不像 BGL 那样 hacky 的Lemon 图形库

于 2012-12-07T10:12:22.343 回答
0

我看不出为什么 map 不能用作存储传出边的数据结构。Map 有迭代器,其工作方式与 saystd::vector等类似。要处理传入的边,每个顶点需要 2 个映射。AFAIK BGL 支持两个顶点列表。

我建议你修改(hack)BGL,看看会发生什么。变化可能不小。您必须为您的新型容器提供 adjacency_list 特化。这很可能会奏效。

于 2012-11-14T09:13:23.013 回答