2012-07-24 252 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

感觉有点不好意思,但我想不出一个更直接的方法来解决这个问题。