[英]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.