2012-07-24 76 views
0

我有一個樹形結構有很多的指針,樹基本上是一個節點是這樣的Qt - 序列化的樹狀結構(很多指針)

class Node 
{ 
    Node *my_father; 
    QVector<Node*> my_children; 

    ... a lot of data 
} 

我需要所有這些指針,使我在RAM內存中工作更輕鬆。但現在我需要將所有的樹結構保存在磁盤上..我正在考慮使用QDataStream序列化(http://www.developer.nokia.com/Community/Wiki/Qt_Object_Serialization)..但我不認爲這是去指針工作..對吧?

你會建議如何將這個大結構保存在磁盤上,並用指針工作將其重新讀入RAM中?

+0

不存儲指針。 – 2012-07-24 22:06:20

+0

那麼我該如何檢索數據在樹中的處理方式? – 2012-07-24 22:08:56

+2

有很多方法。這裏是一個:http://eli.thegreenplace.net/2011/09/29/an-interesting-tree-serialization-algorithm-from-dwarf/ – 2012-07-24 22:12:35

回答

2

爲什麼不使用XML格式?它的設計非常容易與所有結構化數據一起使用,並且使用嵌套對象,比如您使用的樹結構。但是你不想存儲指針 - 只是實際的數據。 (存儲在指針中的數據,描述樹結構本身將變成一個XML結構,所以你不需要它們)。

然後,當您爲某個節點分配新的子節點時,您需要在文件讀取期間重新創建指針。

順便說一句對不起,作出這個答案,而不是評論,但我不能寫問題的評論呢,]。

1

顯然,不能保證從磁盤讀取的指針永遠是有效的。但是,您仍然可以將它們用作'整數ID',如下所示。要寫入,請將指針保存到磁盤以及其餘數據。另外,對於每個類實例,將其自己的地址保存到磁盤。這將是該對象的「整數ID」。要閱讀,

1)使用保存的整數ID信息將每個對象與其子女和父親相關聯。最初,您可能必須將所有的Node都讀入一個大列表。

2)然後一旦孩子,父親在內存中分別將他們的實際地址分別寫入my_fathermy_children

感覺有點不好意思,但我想不出一個更直接的方法來解決這個問題。