Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在C++;?_C++_Json_Pointers_Struct_Directed Acyclic Graphs - Fatal编程技术网

C++ 如何在C++;?

C++ 如何在C++;?,c++,json,pointers,struct,directed-acyclic-graphs,C++,Json,Pointers,Struct,Directed Acyclic Graphs,我有一个JSON格式的DAG,其中每个节点都是一个条目:它有一个名称和两个数组。一个数组用于带有箭头的其他节点,另一个数组用于此节点指向的节点(传出箭头) 例如: { 'id': 'A', 'connected_from' : ['B','C'], 'connects_to' : ['D','E'] } 我有一个这些节点的集合,它们一起组成了一个DAG 我希望将节点映射到一个结构以容纳这些节点,其中id只是一个字符串,并且我希望数组是该结构指针的向量: struct n

我有一个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;
}
struct节点{
字符串id;
向量连接;
与之相连的向量;
}
如何将JSON数组中作为“id”的节点项转换为指向保存该节点的正确结构的指针


一种显而易见的方法是构建键值对的映射,其中key=id,value=指向具有该id的结构的指针,并进行查找-但有更好的方法吗?

没有,仅考虑到您提供的信息,没有更好的方法:您需要构建映射


但是,对于单字母id,地图可能采用简单数组的形式,例如,英文字母表有26个条目。

否,仅根据您提供的信息,没有更好的方法:您需要构建地图


但是,对于单字母id,映射可能采用简单数组的形式,例如26个英文字母表条目。

将有一些容器对象包含所有节点(否则您将泄漏它们)。您可以始终扫描容器以查找节点。但是这将是低效的-O(N^2),而映射查找将是O(N log N)

不过,如果将对象按排序顺序存储在容器中(或使用排序容器),则可以将这两种情况都减少为O(N log N)


但常数会有所不同,因此对于小图形,扫描速度可能会更快

将有一个容器对象容纳所有节点(否则您将泄漏它们)。您可以始终扫描容器以查找节点。但是这将是低效的-O(N^2),而映射查找将是O(N log N)

不过,如果将对象按排序顺序存储在容器中(或使用排序容器),则可以将这两种情况都减少为O(N log N)


但常数会有所不同,因此对于小图形,扫描速度可能会更快

我认为你的建议很好。。。从ID映射到节点。它简单、直观、速度快,适合实际应用。考虑到数据是从JSON解析的,您的存储和查找不会显著影响性能。如果您真的很担心,那么实现一个字典来替换您的地图


总的来说,我总是提倡最简单、最干净的方法来完成工作。太多人沉迷于算法中的内存或性能问题,而他们代码中的实际瓶颈却在别处。

我认为你的建议很好。。。从ID映射到节点。它简单、直观、速度快,适合实际应用。考虑到数据是从JSON解析的,您的存储和查找不会显著影响性能。如果您真的很担心,那么实现一个字典来替换您的地图

总的来说,我总是提倡最简单、最干净的方法来完成工作。太多人沉迷于算法中的内存或性能问题,而代码中的实际瓶颈却在别处