0

私はたくさんのポインタを持つツリー構造を持っています、基本的にツリーのノードはこのようなものです

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に再読み込みするために何を提案しますか?

4

2 に答える 2

2

XML形式を使ってみませんか?設計上、使用するツリー構造のように、ネストされたオブジェクトを使用して、すべての構造化データで非常に簡単に使用できます。ただし、ポインタを格納するのではなく、実際のデータのみを格納します。(ツリー構造を記述するポインターに格納されたデータは、それ自体がXML構造になるため、それらは必要ありません)。

次に、あるノードに新しい子を割り当てるときに、ファイルの読み取り中にポインタを再作成する必要があります。

ところで、この回答をしてコメントしないことをお詫びしますが、私はまだ質問コメントを書くことができません;]。

于 2012-07-25T12:26:32.247 に答える
1

明らかに、ディスクから読み取られたポインタがそのように有効であるという保証はありません。ただし、次のように、それらを「整数ID」として使用することもできます。書き込むには、残りのデータと一緒にポインタをディスクに保存します。さらに、クラスインスタンスごとに、独自のアドレスをディスクに保存します。これは、そのオブジェクトの「整数ID」になります。読むには、

1)保存された整数ID情報を使用して、各オブジェクトをその子と父親に関連付けます。最初は、おそらくすべてをNode1つの大きなリストに読み込む必要があります。

2)次に、子供たちが記憶に残ったら、父親は実際の住所をそれぞれmy_fatherとに書き込みmy_childrenます。

私には少しハッキーな感じがしますが、これを達成するためのより直接的な方法は考えられません。

于 2012-07-24T22:20:00.373 に答える