在BGL中,如何使用顶点的属性有效地找到相邻顶点
In BGL, how to efficiently find an adjacent vertex using a property of a vertex
我有一个双向图(即一个有向图,其中可以迭代入边和出边)。
在其他内部属性中,每个顶点都有一个特殊的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
等免费函数来隐藏实现。
相关文章:
- 有效地使用std::unordered_map来插入或增加键的值
- 如何有效地在 std::vector 中插入一对?
- 有效地计算多维数组的累积和?
- 如何有效地计算将单位立方体映射到自身的反射和旋转?
- 有效地将大数存储为 2 的幂用于路径问题
- 如何在C++中写入 1000 个文件时有效地缓冲
- 如何有效地找到数组中三元组和的最小差异?
- 如何在C++中有效地将数字值重新分配给字符数组
- C++有效地找到向量中第一个最接近的匹配值?
- 如何有效地操作满足给定谓词的向量中的所有项目?
- 有效地将数据加载到 std::vector 中<char>
- 如何在使用 cin 请求 int 时有效地使用户输入万无一失?
- C++:有效地将Sha256摘要放入OpenSSL Bignum?
- 如何有效地收集给定数组中的重复元素?
- 如何有效地修剪和合并四叉树中的节点?
- 可以有效地转换 std::any 与 std::any_cast
- 只需要知道我在c ++中打印模式的方式是否有效,或者有另一种方法可以有效地做到这一点
- 如何使用包含内部类的类实例有效地从内部类访问成员?
- 仅使用顶点着色器有效地渲染
- 在BGL中,如何使用顶点的属性有效地找到相邻顶点