因此,在我解决了BGL的循环依赖问题之后,我又遇到了另一个障碍。
我目前正在使用邻接列表来建模我的图表。应用节点和边的捆绑属性以在图中存储一些信息。所以我有这样的事情:
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的指针,但我不知道是否以及如何工作。
/////////////////////////////////////////////// ////////////////////////////////////////////////// ////////////////////////////////////////////////// //////////////////
编辑:既然我的第一个问题得到了彻底的回答,我仍然想知道一件事。我想为我的图类构建一些接口。该接口应该从其他类中分离图类详细信息,这些类必须不了解图的细节。因此,其他类应该优选地将节点和边缘识别为数字。 所以我提出了两个想法:std::tr1::unordered_map<int, edge_descriptor>
能够将数字转换为描述符,然后再将这些描述符用作我的图形对象的索引。这可能是一步到位 - 也许哈希值的计算将花费太多时间
如果有足够的节点和边缘要计算。这就是为什么我有了第二个想法。boost::property_map<My_Graph, my_prop>::type index = get(my_prop(), G);
但是有没有办法将这些属性贴图与我的捆绑属性结合起来?
或者你有另一个我没想过的想法吗?
答案 0 :(得分:1)
顶点和边缘描述符的大小非常小。
顶点描述符是数字。 边缘描述符是一个包含源和目标顶点描述符的小结构,以及一个指向附加到边描述符的内部数据的指针。
因此,您的问题的答案是您可以在向量中使用它们。它不会构成记忆问题。