【问题标题】:C++ Serialize/Deserialize std::map<int,int> from/to fileC++ 序列化/反序列化 std::map<int,int> 从/到文件
【发布时间】:2013-04-11 03:42:48
【问题描述】:

我有一个 std::map。

我想知道我是否可以使用 fwrite 将其写入文件(也可以从文件中读取),或者我是否需要分别写入/读取每个值。

我希望因为没什么特别的,这可能是可能的。

【问题讨论】:

  • 序列化不是一个完全简单的任务。但之前已经做过了。例如,看看boost::serialization。它带有用于序列化标准库容器的现成代码,包括std::maps。

标签: c++ serialization map


【解决方案1】:

使用boost::serialization 在一行中进行序列化。 标题:

boost/serialization/map.hpp

代码示例

#include <map>
#include <sstream>
#includ  <iostream>
#include <boost/serialization/map.hpp>
#include <boost/archive/text_iarchive.hpp>
#include <boost/archive/text_oarchive.hpp>

int main()
{
   std::map<int, int> map = {{1,2}, {2,1}};
   std::stringstream ss;
   boost::archive::text_oarchive oarch(ss);
   oarch << map;
   std::map<int, int> new_map;
   boost::archive::text_iarchive iarch(ss);
   iarch >> new_map;
   std::cout << (map == new_map) << std::endl;
}

输出:

g++ -o new new.cpp -std=c++0x -lboost_serialization
./new
1

对于文件,只需使用std::ifstream/std::ofstream 而不是std::stringstream,也可以是binary_archive,而不是text_archive。

【讨论】:

    【解决方案2】:

    没有一个单行来序列化地图。您需要单独编写每个键/值对。不过,这实际上并不比 for 循环复杂多少。

    使用 boost,可能有办法,但我不熟悉确切的 API。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-22
      • 2011-08-07
      • 1970-01-01
      • 2011-12-28
      • 1970-01-01
      • 2010-09-13
      • 2015-02-10
      相关资源
      最近更新 更多