首页 文章

在BGL中,如何使用顶点的属性有效地找到相邻顶点

提问于
浏览
0

我有一个双向图(即有向图,其中可以迭代入边和出边) .

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

此属性在图形范围内不是唯一的(即,可以有两个具有相同ID的顶点),因此不能与named / labeled_graph一起使用 . 然而,它在给定顶点的范围内是唯一的,即传入的邻居和顶点的外向邻居都应具有不同的ID .

我的问题是在BGL中是否有一个构建机制来有效地找到相邻的顶点u,v给定u的描述符,图形和u的ID .

这当然可以使用一些外部映射来实现,但感觉就像一个非常常见的场景,并且假设adjacency_list的第一个模板参数可以是一个关联容器 - 看起来很自然地有某种find_adjacent(v,g,ID)功能,唉,我无法找到类似的东西 .

非常感谢,安德烈

1 回答

  • 0

    您不发布样本,但是根据给定的描述,您可以为 OutEdgeList 选择有序集,并按目标顶点ID(在该范围内唯一)对其进行排序 .

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

    如果您愿意,可以轻松添加免费功能,如 find_adjacent 来隐藏实现 .

相关问题