2008-09-26 10 views
8

Kennen Sie einen einfachen oder einfachen Weg, um ein Map-Objekt (aus der STL-Bibliothek) persistent zu machen (dh in eine Datei schreiben), so dass Sie seinen Zustand später wiederherstellen können, wenn das Programm im laufe später ??Persistenz von std :: map in C++

Danke für Ihre Hilfe

Antwort

11

Ich glaube, die Boost Serialization Bibliothek bietet std :: map of Serialisierung der Lage, aber die Standard-Bibliothek selbst keine Mittel. Serialisierung ist eine großartige Bibliothek mit vielen Funktionen und ist einfach zu verwenden und auf Ihre eigenen Typen zu erweitern.

10

Wenn Sie es manuell tun wollen, auf die gleiche Weise andere Container-Struktur bestehen bleiben würde, schreiben die einzelnen Teile auf der Festplatte:

outputFile.Write(thisMap.size()); 
for (map<...>::const_iterator i = thisMap.begin(); i != thisMap.end(); ++iMap) 
{ 
    outputFile.Write(i->first); 
    outputFile.Write(i->second); 
} 

und lesen sie dann zurück in:

size_t mapSize = inputFile.Read(); 
for (size_t i = 0; i < mapSize; ++i) 
{ 
    keyType key = inputFile.Read(); 
    valueType value = inputFile.Read(); 
    thisMap[key] = value; 
} 

Offensichtlich werden Sie die Dinge arbeiten müssen auf der Grundlage Ihrer Kartentyp und Datei-i/o-Bibliothek.

Andernfalls versuchen Sie boost serialization oder google's new serialization library.