簡體   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