繁体   English   中英

Boost图形库的性能vertex_descriptor

[英]Performance vertex_descriptor of the Boost Graph Library

我对用于访问图形中顶点的vertex_descriptor有疑问。 在我自己的先前实现中,我在顶点上使用了指针,就像直接在顶点上访问的方法一样。 如果我想通过整数或其他方式访问IDVertex,则可以实现映射。

但是在BGL中,我不明白为什么vertex_descriptor是整数? 我知道它对矢量很有用。 但是,如果我想使用一系列广泛的顶点,例如10 ^ 6,并且能够删除该集合的任何顶点,则可以使用地图。 另外,在我的游戏中,我希望能够通过更具逻辑性的指针整数来引用每个节点?

BGL如何在no_random_access_container中将整数与顶点链接起来,例如std :: set? 访问方法始终为log(n)否? 您能解释一下是否有一种机制可以直接在顶点上保持句柄而不保留vertex_descirptor吗?

对不起,我的英语不好 ;)

当将顶点容器策略定义为vecS,setS或listS时,vertex_descriptor成为相应容器中[iterator]指向的[“ value_type”指向。 vertex_iterator类型通常是此容器中的迭代器类型。

这意味着对顶点的访问始终为O(1)。 如果使用setS,添加和删除新顶点将花费O(logN),如果使用listS或vecS,则花费O(1)。 在vecS情况下,删除顶点会使其他一些顶点无效,但listS或setS无效。 有关详细信息,请参见邻接图页面上的 迭代器和描述符稳定性/无效部分。

关于您的其他问题。 如果要直接在顶点上保留数据的(指针),则将其添加为顶点属性。

通常,您需要在数据和图形顶点之间进行某种一对一的映射。 将直接映射保留为boost :: unordered_set和将反向映射作为每个顶点的属性会很方便。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM