C ++中std :: map的持久性

时间:2020-03-06 14:45:52  来源:igfitidea点击:

我们是否知道任何简单或者简单的方法来使映射对象(从STL库)持久化(即将其写入文件),以便稍后在以后运行程序时可以恢复其状态?

谢谢你的帮助

解决方案

我相信Boost序列化库能够序列化std :: map,但是标准库本身不提供任何手段。序列化是一个很棒的库,具有很多功能,并且易于使用并且可以扩展到我们自己的类型。

答案是序列化。具体细节取决于需求和环境。对于初学者,请查看Boost序列化库:http://www.boost.org/doc/libs/1_36_0/libs/serialization/doc/index.html

如果要手动执行此操作(与保留任何其他容器结构的方式相同),请将各个部分写到磁盘上:

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

然后读回它们:

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

显然,我们需要根据地图类型和文件I / O库使事物正常运行。

否则,请尝试增强序列化或者Google的新序列化库。