因此,在解決了BGL的循環依賴問題後,我又遇到了另一個障礙。BGL:如何有效存儲edge_descriptors和vertex_descriptors?
我目前使用的鄰接表到我的圖模型。節點和邊的捆綁屬性應用於在圖中存儲一些信息。所以,我有這樣的事情:
class Node {
int x, int y // position
};
class Edge {
float length;
};
boost::adjacency_list<boost::listS, boost::listS, boost::directedS, Node, Edge>
的問題出現時,我想存儲的快捷方式到特定的節點和邊別的地方在我的代碼(例如,對於一個具有多個車道的街道)。我的第一個方法是保存我需要它們的edge_descriptors和vertex_descriptors。但是我想知道這樣的描述符會有多大(以字節爲單位)。也許有更好的解決方案,例如只存儲一小部分信息以獲得相同的結果。
有誰知道這是用於這種類型的向量的內存量:
std::vector<edge_descriptor> ?
我已經想過只是存儲指向edge_descriptors,但我不知道是否以及如何將工作。
////////////////////////////////////////////// ////////////////////////////////////////////////// ////////////////////////////////////////////////// ///////////////////
編輯:現在,我的第一個問題已經回答看一遍,我依然在想一兩件事。我想爲圖類創建一些接口。這個接口應該從其他類中分離圖類的細節,這些類必須不知道圖的細節。因此其他類應該優選地將節點和邊緣識別爲數字。 於是我想出了兩個想法:
- 我用的hash_map
std::tr1::unordered_map<int, edge_descriptor>
能夠將數字轉換爲描述符,再次隨後用作索引到我的圖形對象。這可能是一個很大的步驟 - 也許如果有足夠的節點和邊緣需要計算,哈希值的計算將花費太多時間 。這就是爲什麼我有第二個想法。 - 圖形本身應該在內部將這些數字轉換爲邊和節點。我知道內部屬性和屬性地圖可以用來實現我的想法。然後,您可以只輸入像訪問一個節點:
boost::property_map<My_Graph, my_prop>::type index = get(my_prop(), G);
但是,有沒有辦法財產的地圖,我綁定屬性結合在一起?
或者你有另一個想法,我沒打,沒?
嘿,謝謝你的詳細信息。你是否也有一些互聯網資源,以便我可以向其他人證明這一點,如果他們問我? :-) – Bastian 2010-11-25 16:45:52