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

时间:2015-04-15 16:15:55

标签: c++ boost boost-graph

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

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

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

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

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

非常感谢, 安德烈

1 个答案:

答案 0 :(得分:0)

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

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

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