10

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

谢谢你的帮助

4

3 回答 3

11

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

于 2008-09-26T03:51:14.803 回答
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 序列化,或谷歌的新序列化库

于 2008-09-26T03:55:55.040 回答
2

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

于 2008-09-26T03:54:05.527 回答