![](/img/trans.png)
[英]Boost Graph Library: Check validity of vertex_descriptor in a performant way
[英]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.