簡體   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