繁体   English   中英

如何在C ++中将struct属性转换为指针引用?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM