C++ 如何在C++;?
我有一个JSON格式的DAG,其中每个节点都是一个条目:它有一个名称和两个数组。一个数组用于带有箭头的其他节点,另一个数组用于此节点指向的节点(传出箭头) 例如: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
{
'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解析的,您的存储和查找不会显著影响性能。如果您真的很担心,那么实现一个字典来替换您的地图 总的来说,我总是提倡最简单、最干净的方法来完成工作。太多人沉迷于算法中的内存或性能问题,而代码中的实际瓶颈却在别处