2012-08-02 113 views
0

我有一個JSON格式的DAG,其中每個節點都是一個條目:它有一個名稱和兩個數組。一個陣列用於其他箭頭進入的節點,另一個陣列用於該節點指向的節點(外出箭頭)。如何將struct屬性轉換爲C++中的指針引用?

因此,舉例來說:

{ 
    '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的結構的指針,並執行查找 - 但有沒有更好的方法?

回答

2

不,只有您提供的信息沒有更好的方法:您需要製作地圖。然而,對於單個字母id的地圖,地圖可能採用例如簡單數組的形式,例如, 26個英文字母的條目。

1

將會有一些容器對象容納所有節點(否則你會泄漏它們)。你總是可以掃描容器來查找節點。但是這將是低效的 - O(N^2),而地圖查找將是O(N log N)。

雖然如果按排序順序將對象存儲在容器中(或使用已排序的容器),則可以將兩種情況都減少到O(N log N)。

雖然常數不同,所以對於小圖,掃描可能會更快。

1

我認爲你的建議很好......從ID映射到節點。它非常簡單,直觀且足夠實用。考慮到數據正在從JSON進行分析,您的存儲和查找不會對性能產生重大影響。如果你真的擔心,然後實施一個字典來取代你的地圖。

總的來說,我總是提倡最簡單,最乾淨的方法來完成工作。當代碼中的實際瓶頸存在於其他地方時,太多人對算法中的內存或性能命中感興趣。

相關問題