Persistenza di std :: map in C ++
-
02-07-2019 - |
Domanda
Conosci un modo semplice o semplice per rendere persistente un oggetto mappa (dalla libreria STL) (cioè scriverlo su un file) in modo da poterne ripristinare lo stato in seguito quando il programma verrà eseguito in seguito ??
Grazie per l'aiuto
Soluzione
Credo che la libreria Boost Serialization è in grado di serializzare std :: map, ma la stessa libreria standard non fornisce alcun mezzo. La serializzazione è un'ottima libreria con molte funzionalità ed è facile da usare e da estendere ai tuoi tipi.
Altri suggerimenti
Se vuoi farlo manualmente, allo stesso modo in cui dovresti persistere su qualsiasi altra struttura del contenitore, scrivi le singole parti sul disco:
outputFile.Write(thisMap.size());
for (map<...>::const_iterator i = thisMap.begin(); i != thisMap.end(); ++iMap)
{
outputFile.Write(i->first);
outputFile.Write(i->second);
}
e poi rileggili 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;
}
Ovviamente, dovrai far funzionare le cose in base al tipo di mappa e alla libreria di I / O dei file.
Altrimenti prova aumentare la serializzazione , oppure la nuova libreria di serializzazione di google .
La risposta è la serializzazione. Le specifiche dipendono dalle tue esigenze e dal tuo ambiente. Per cominciare, dai un'occhiata alla libreria Boost Serialization: http: / /www.boost.org/doc/libs/1_36_0/libs/serialization/doc/index.html