C ++ - 如何将地图写入文件并稍后再读取

时间:2016-04-21 13:12:12

标签: c++ c++11 c++14

我有一张类型

的地图
map<int,set<int> > 

我需要写入本地磁盘中的文件并稍后再读回来。当实际程序运行时,它太大而无法存储在程序存储器中。所以我正在考虑将地图的内容写入文件而不是稍后阅读。我知道这可以通过使用

来完成
FileOutputStream, ObjectInputStream and InputObjectStream 
在Java中

。在C ++中是否有类似的方法?我很兴奋尝试这一点。

#include <boost/serialization/map.hpp>
int main(){
    map<int,set<int> > mp;
    std::ofstream ofs("filename");
    boost::serialization::map M(ofs);
    M<<mp;
    //after this add key-value pairs to mp
}

1 个答案:

答案 0 :(得分:0)

有许多方法可以通过各种权衡来序列化数据。

C ++标准库通常包括尝试最佳解决问题的方法;如果没有找到最佳解决方案,而不是选择一个解决方案,那么最终用户就会将其留给您。

它提供了将字节写入文件的方法。它为基本类型和std::string及类似的控制台提供格式化的流操作。

它不包含序列化其余std容器的代码。没有明确的&#34;最佳&#34;答案。

有许多库可以提供序列化,附带各种选择,接口和选项,以及各种权衡。你也可以自己写。

如果您自己编写,请注意字节序问题,并提供自动回退的无缝版本控制。此外,可能使用不同的选择为可能递归的容器内容提供自定义点。理想情况下,您还希望将序列化和反序列化代码设置为以不同方式使用的相同代码(可能使用不同的模板参数),并使其具有抗错误性(因为一旦文件在磁盘上,你无法修复它们中的错误。)