Persistência de std :: map em C ++
-
02-07-2019 - |
Pergunta
Você sabe alguma maneira fácil ou simples de fazer um objeto mapa (da biblioteca STL) persistente (ou seja, escrevê-lo em um arquivo), de modo que você pode recuperar seu estado mais tarde, quando o programa em funcionamento mais tarde ??
Obrigado por sua ajuda
Solução
Eu acredito que a impulso biblioteca de serialização é capaz de serialização std :: mapa, mas a própria biblioteca padrão não fornece meios. Serialização é uma grande biblioteca com um monte de recursos e é fácil de usar e estender a seus próprios tipos.
Outras dicas
Se você quiser fazê-lo manualmente, da mesma forma que você persistir qualquer outra estrutura recipiente, escrever as partes individuais no 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, em seguida, lê-los de volta em:
size_t mapSize = inputFile.Read();
for (size_t i = 0; i < mapSize; ++i)
{
keyType key = inputFile.Read();
valueType value = inputFile.Read();
thisMap[key] = value;
}
Obviamente, você precisa fazer as coisas funcionarem com base no seu tipo de mapa e arquivo i / o da biblioteca.
Caso contrário, tente impulso serialização , ou nova biblioteca de serialização do Google .
A resposta é serialização. Especificidades depender de suas necessidades e seu ambiente. Para começar, consulte a biblioteca de serialização Boost: http: / /www.boost.org/doc/libs/1_36_0/libs/serialization/doc/index.html