【问题标题】:In BGL, how to efficiently find an adjacent vertex using a property of a vertex在 BGL 中,如何使用顶点的属性有效地找到相邻顶点
【发布时间】:2015-04-15 16:15:55
【问题描述】:

我有一个双向图(即可以迭代入边和出边的有向图)。

除了其他内部属性之外,每个顶点都有一个特殊的 ID 属性,它是来自有限集(数百个)的整数,在程序启动时已知,也就是说 - 它不会在程序的生命周期内改变,但是在编译时是未知的。

此属性在图的范围内不是唯一的(即可以有两个具有相同 ID 的顶点),因此不能与命名/标签图一起使用。 然而,它在给定顶点的范围内是唯一的,即顶点的传入邻居和传出邻居都应该具有不同的 ID。

我的问题是 BGL 中是否有内置机制可以有效地找到 v 的相邻顶点 u,给定 u u 的描述符、图形和 ID。

这当然可以使用一些外部映射来实现,但感觉是很常见的场景,并且考虑到 adjacency_list 的第一个模板参数可以是一个关联容器——拥有某种 find_adjacent(v, g,ID) 函数,唉,我找不到类似的东西。

非常感谢, 安德烈

【问题讨论】:

    标签: c++ boost boost-graph


    【解决方案1】:

    您没有发布示例,但从给出的描述中,您可以为OutEdgeList 选择一个有序集,并按目标顶点 ID(在该范围内是唯一的)对其进行排序。

    现在您可以在任何给定节点的 out_edges 上使用 std::lower_bound/std::upper_bound/std::equal_range

    如果您愿意,可以轻松添加 find_adjacent 等免费函数来隐藏实现。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-22
      相关资源
      最近更新 更多