我有一个双向图(即有向图,其中可以迭代入边和出边) .
除了其他内部属性之外,每个顶点都有一个特殊的ID属性,它是一个有限集(几百个)中的整数,它在程序启动时就已知,也就是说 - 它在程序的生命周期内不会改变,但它是未知的在编译时 .
此属性在图形范围内不是唯一的(即,可以有两个具有相同ID的顶点),因此不能与named / labeled_graph一起使用 . 然而,它在给定顶点的范围内是唯一的,即传入的邻居和顶点的外向邻居都应具有不同的ID .
我的问题是在BGL中是否有一个构建机制来有效地找到相邻的顶点u,v给定u的描述符,图形和u的ID .
这当然可以使用一些外部映射来实现,但感觉就像一个非常常见的场景,并且假设adjacency_list的第一个模板参数可以是一个关联容器 - 看起来很自然地有某种find_adjacent(v,g,ID)功能,唉,我无法找到类似的东西 .
非常感谢,安德烈
1 回答
您不发布样本,但是根据给定的描述,您可以为
OutEdgeList
选择有序集,并按目标顶点ID(在该范围内唯一)对其进行排序 .现在,您可以在任何给定节点的out_edges上使用
std::lower_bound
/std::upper_bound
/std::equal_range
.如果您愿意,可以轻松添加免费功能,如
find_adjacent
来隐藏实现 .