2008-09-26 16 views
8

Czy znasz prosty lub prosty sposób, aby obiekt mapy (z biblioteki STL) był trwały (tzn. Zapisywał go do pliku), aby można było odzyskać jego stan później, gdy program w biegu później?Trwałość std :: map w C++

Dzięki za pomoc

Odpowiedz

11

wierzę biblioteka Boost Serialization jest zdolny do szeregowania std :: map, ale sama biblioteka standardowa zawiera żadnych środków. Serializacja jest świetną biblioteką z wieloma funkcjami i jest łatwa w użyciu oraz rozszerza się na własne typy.

10

Jeśli chcesz zrobić to ręcznie, w ten sam sposób chcesz utrzymywać jakiekolwiek inne struktury kontenera, pisać poszczególne części na dysku:

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

i Następnie przeczytaj je ponownie w:

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

Oczywiście musisz sprawić, by rzeczy działały w oparciu o twój typ mapy i bibliotekę plików i/o.

W przeciwnym razie spróbuj boost serialization lub google's new serialization library.