Ich habe eine C++-Klasse, die einen hierarchisch organisierten Datenbaum darstellt, der sehr groß ist (~Gb, im Grunde so groß, wie ich im Speicher wegkommen kann). Es verwendet eine STL-Liste, um Informationen an jedem Knoten plus Iteratoren zu anderen Knoten zu speichern. Jeder Knoten hat nur einen Elternteil, aber 0-10 Kinder. Abstrahiert sieht es in etwa so aus:
struct node {
public:
node_list_iterator parent; // iterator to a single parent node
double node_data_array[X];
map<int,node_list_iterator> children; // iterators to child nodes
};
class strategy {
private:
list<node> tree; // hierarchically linked list of nodes
struct some_other_data;
public:
void build(); // build the tree
void save(); // save the tree from disk
void load(); // load the tree from disk
void use(); // use the tree
};
Ich möchte die load() und save() auf der Festplatte zu implementieren, und es sollte ziemlich schnell sein, aber die offensichtlichen Probleme sind:
-
Ich kenne die Größe nicht im Voraus;
-
Die Daten enthalten Iteratoren, die flüchtig sind;
-
Meine Unkenntnis von C++ ist ungeheuer groß.
Kann jemand eine reine C++-Lösung vorschlagen?