2008-09-26 125 views
8

您是否知道任何简单或容易的方法来使得地图对象(来自STL库)持久化(即将其写入文件),以便在程序稍后恢复其状态在以后运行?C++中std :: map的持久性

感谢您的帮助

回答

11

我相信Boost Serialization库能够序列化的std ::地图的,但标准库本身没有提供任何手段。序列化是一个伟大的库,具有很多功能,易于使用并扩展到您自己的类型。

10

如果你想要做手工,你会坚持任何其他容器结构以同样的方式,写入到磁盘的各个部分:

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库使事情工作。

否则尝试boost serializationgoogle's new serialization library