[英]Boost Graph Library: Are Vertex Descriptors Necessarily Unique?
我意识到这可能是迂腐的,但是 BGL 顶点描述符总是唯一的吗? 对于背景,我有以下图形定义:
typedef boost::adjacency_list<boost::setS, boost::listS, boost::undirectedS, VProp, EProp> Graph;
我在哪里使用listS
作为节点数据结构。 我知道这使我的描述符(看起来是void*
类型)“稳定”:当从图中删除节点时,仍然可以使用其他节点的其他描述符。
不过,我已经浏览了 BGL 文档,但无法保证这些描述符是唯一的。 本质上,我想知道两个描述符是否==
当且仅当它们指向的底层节点数据相同时。 换句话说,直接比较描述符是检查节点相等性的有效方法吗?
显然,当节点数据结构为vecS
时这是正确的(因为在这种情况下描述符是索引),但我在 BGL 文档中没有找到listS
的任何信息。
提前致谢
到标题:
顶点描述符一定是唯一的吗?
是的。
换句话说,直接比较描述符是检查节点相等性的有效方法吗?
是的。
显然,当节点数据结构为 vecS 时,这是正确的
确切地。 我只是要给出这个确切的例子来给出部分证明。 这说明你对库的理解已经相当深入了。
我碰巧对代码进行了更深入的研究,并且知道在基于节点的顶点容器选择器(listS、setS 等)的情况下的描述符类型。 将相当于对该(实现定义的)容器中元素的直接引用的类型擦除版本。
请注意,元素的实际类型将根据模板 arguments 的许多不同而有所不同,这就是为什么描述符被强制转换为不透明void*
所以
鉴于这种性质,我们可以同时解释稳定性(它与底层容器实现的参考稳定性相匹配)和唯一性保证(描述符标识与(顶点)存储容器中元素的 object 标识一致)。
注意这个答案只会让您放心adjacency_list<>
实例化的情况。 还有其他 Graph 模型。 我碰巧知道大多数人都有非常相似的保证,其证明基本上遵循相同的结构。
我尚未(尚未)仔细检查文档以验证您声称它是无证的,并且我不相信添加明确的保证会有所帮助,但我建议您提出这个问题。 对于 (C++) 程序员来说,这是一个好习惯。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.