[英]How to convert a struct property to a pointer reference in C++?
我有一个JSON格式的DAG,其中每个节点都是一个条目:它有一个名称和两个数组。 一个阵列用于带有箭头的其他节点,另一阵列用于该节点指向的节点(向外的箭头)。
因此,例如:
{
'id': 'A',
'connected_from' : ['B','C'],
'connects_to' : ['D','E']
}
我有这些节点的集合,它们一起组成了DAG。
我想将节点映射到保存这些节点的结构,其中id只是一个字符串,并且我希望数组是此结构的指针的向量:
struct node {
string id;
vector<node*> connected_from;
vector<node*> connected_to;
}
如何将JSON数组中的节点条目“ id”转换为指向保存该节点的正确结构的指针?
一种明显的方法是构建键-值对的映射,其中key = id,value =指向具有该id的结构的指针,并进行查找-但是有更好的方法吗?
不,仅给出您提供的信息就没有更好的方法:您需要构建地图。
但是,对于单个字母id来说,地图可能采用简单数组的形式,例如,包含26个英文字母条目。
将有一个包含所有节点的容器对象(否则,您将泄漏它们)。您始终可以在容器上进行扫描以找到节点。 但这将是低效的-O(N ^ 2),而映射查找将是O(N log N)。
尽管如果将对象按排序顺序存储在容器中(或使用排序后的容器),则可以将两种情况都减少为O(N log N)。
但是,常数会有所不同,因此对于较小的图形,扫描速度可能会更快。
我认为您的建议很好...从ID映射到节点。 它简单,直观且足够快,可以满足实际用途。 考虑到正在从JSON解析数据,因此您的存储和查找不会显着影响性能。 如果您真的很担心,请实施一个Dictionary来替换您的地图。
总的来说,我一直主张最简单,最干净的方法来完成工作。 当他们的代码中的实际瓶颈位于其他地方时,太多的人迷恋算法中的内存或性能问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.