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

In BGL, how to efficiently find an adjacent vertex using a property of a vertex

本文关键字:顶点 有效地 属性 何使用 BGL      更新时间:2023-10-16

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

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

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

我的问题是,在给定u的描述符、图和u的ID的情况下,BGL中是否有一种内置机制可以有效地找到v中的相邻顶点u-

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

非常感谢,Andrey

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

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

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