因此,在解决了我与 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);
但是有没有办法将这些属性映射与我的捆绑属性结合起来?
或者你还有其他我没有想到的想法吗?