2016-04-21 5 views
0

Ich habe eine Karte vom TypC++ - Wie man eine Karte in eine Datei schreiben und es später wieder

map<int,set<int> > 

, die ich brauche, um eine Datei in der lokalen Festplatte zu schreiben und es später wieder zu lesen. Es ist zu groß, um im Programmspeicher gespeichert zu werden, wenn das aktuelle Programm läuft. Daher denke ich daran, den Inhalt der Karte stattdessen in eine Datei zu schreiben und diese später wieder zu lesen. Ich weiß, dass dies unter Verwendung

FileOutputStream, ObjectInputStream and InputObjectStream 

in Java getan werden kann. Gibt es eine ähnliche Methode in C++? Ich versuche, dies mit Boost zu versuchen.

#include <boost/serialization/map.hpp> 
int main(){ 
    map<int,set<int> > mp; 
    std::ofstream ofs("filename"); 
    boost::serialization::map M(ofs); 
    M<<mp; 
    //after this add key-value pairs to mp 
} 
+1

http://www.stev.org/post/2012/03/19/C++-Read-Write-stdmap-to-a-file.aspx Ich denke, diese Verbindung sehr nützlich sein kann –

+2

Es gibt viele Serialisierung Bibliotheken für C++ verfügbar ... zum Beispiel boost :: serialization – steiner

+0

Ich möchte die Karte direkt in eine Datei schreiben. Schreiben Sie es nicht zur Laufzeit in den Programmspeicher und schreiben Sie es am Ende des Programms in eine Datei. Würden die Boost-Bibliotheken dies ermöglichen? – samurdhilbk

Antwort

0

Es gibt viele, viele Möglichkeiten, Daten mit verschiedenen Vor- und Nachteile serialisieren.

Die C++ - Standardbibliothek enthält normalerweise Versuche für optimale Problemlösungen. In Fällen, in denen keine optimale Lösung gefunden werden kann, überlässt es Ihnen, dem Endanwender, die Auswahl.

Es bietet Möglichkeiten zum Schreiben von Bytes in Dateien. Es bietet formatierte Streaming-Operationen für die Konsole von primitiven Typen und std::string s und ähnlichem.

Es enthält keinen Code, um den Rest der std Container zu serialisieren. Es gibt keine klare "beste" Antwort.

Es gibt viele, viele Bibliotheken, die die Serialisierung mit verschiedenen Optionen, Schnittstellen und Optionen sowie verschiedene Kompromisse ermöglichen. Sie können es auch selbst schreiben.

Wenn Sie es selbst schreiben, achten Sie auf Endianness-Probleme und sorgen für eine nahtlose Versionierung mit automatischem Fallback. Stellen Sie außerdem einen Anpassungspunkt für den Inhalt des zu serialisierenden Containers bereit, möglicherweise rekursiv, möglicherweise unter Verwendung anderer Auswahlmöglichkeiten. Idealerweise möchten Sie auch, dass Ihr Serialisierungs- und Deserialisierungscode derselbe Code ist, der auf unterschiedliche Weise verwendet wird (möglicherweise mit einem anderen Template-Parameter) und dass er fehlerresistent ist (weil Dateien auf der Festplatte gespeichert werden) kann Fehler in ihnen nicht reparieren).

Verwandte Themen