簡體   English   中英

BGL:如何有效地存儲edge_descriptor和vertex_descriptor?

[英]BGL: How do I store edge_descriptors and vertex_descriptors efficiently?

因此,在解決了與BGL的循環依賴問題之后,我遇到了另一個障礙。

我目前正在使用鄰接列表來對圖形進行建模。 節點和邊的捆綁屬性均適用於在圖中存儲一些信息。 所以我有這樣的事情:

class Node {
    int x, int y // position
};
class Edge {
    float length;
};

boost::adjacency_list<boost::listS, boost::listS, boost::directedS, Node, Edge>

當我想在我的代碼中的其他位置存儲指向特定節點和邊緣的快捷方式時(例如,對於具有多個車道的街道),就會出現問題。 我的第一種方法是將edge_descriptor和vertex_descriptors保存在需要的地方。 但是我想知道這樣的描述符有多大(就字節而言)。 也許有更好的解決方案,例如只存儲一小部分信息以獲得相同的結果。

是否有人知道用於這種類型的向量的內存量:

std::vector<edge_descriptor> ?

我已經考慮過只存儲指向edge_descriptors的指針,但是我不知道它是否以及如何工作。

////////////////////////////////////////////////// ////////////////////////////////////////////////// ////////////////////////////////////////////////// ///////////////

編輯:現在我的第一個問題已得到徹底解答,我仍然想知道一件事。 我想為我的圖類建立某種接口。 該接口應將圖類的詳細信息與其他類分開,而其他類則不必知道圖的詳細信息。 因此,其他類最好將節點和邊識別為數字。 因此,我提出了兩個想法:

  1. 我使用hash_map std::tr1::unordered_map<int, edge_descriptor>能夠將數字轉換為描述符,然后再次將其用作我的圖形對象的索引。 這可能是邁出的第一步-如果有足夠的節點和邊要計算,則哈希值的計算可能會花費太多時間。 這就是為什么我有第二個想法。
  2. 圖本身應在內部將這些數字轉換為邊和節點。 我知道內部屬性以及屬性映射可用於實現我的想法。 然后,您只需鍵入以下內容即可訪問節點:
    boost::property_map<My_Graph, my_prop>::type index = get(my_prop(), G);

但是,是否有一種方法可以將此類屬性映射與我的捆綁屬性組合在一起?

還是您還有另一個我沒想到的想法?

頂點和邊描述符的尺寸很小。

頂點描述符是數字。 邊緣描述符是一個小結構,包含源和目標頂點描述符,以及指向附加到邊緣描述符的內部數據的指針。

因此,您的問題的答案是可以在向量中使用它們。 它不會構成內存問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM