因此,在解决了 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 的指针,但我不知道这是否以及如何工作。
/////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////// //////////////////////////////
编辑:既然我的第一个问题已经得到彻底回答,我仍然想知道一件事。我想为我的图形类构建某种接口。该接口应将图类详细信息与其他类分开,其他类不得了解图的详细信息。因此,其他类最好将节点和边识别为数字。
所以我想出了两个想法:
- 我使用 hash_map
std::tr1::unordered_map<int, edge_descriptor>
能够将数字转换为描述符,然后再次用作我的图形对象的索引。这可能是一步太多 - 也许哈希值的计算会花费太多时间
是否有足够的节点和边需要计算。这就是为什么我有第二个想法。
- 图本身应在内部将这些数字转换为边和节点。我知道内部属性和属性映射可以用来实现我的想法。然后,您只需键入以下内容即可访问节点:
boost::property_map<My_Graph, my_prop>::type index = get(my_prop(), G);
但是有没有办法将此类属性映射与我的捆绑属性结合起来?
或者你还有其他我没有想到的想法吗?