C++ 序列化/反序列化 std::map<int,int> 从/到文件

标签 c++ serialization map

我有一个 std::map。

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

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

最佳答案

使用 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.

关于C++ 序列化/反序列化 std::map<int,int> 从/到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16075953/

相关文章:

c++ - 何时使用 include guards 或 #pragma once C++

java - 通过网络和字节数组序列化/反序列化Java对象

Java - 序列化一个线程

c# - 使用 override void WriteEndElement() 时如何使用 XmlWriterSettings()?

android - 如何在android中通过纬度和经度获取城市名称?

c++ - 编译器是否在由 new 初始化的对象上调用隐式析构函数

c++ - 大小为零的数组?

c++ - 使用带类错误的 map ,编译错误

c++ - 在 std::copy 中推进列表迭代器时出错

java - 在 Java 中创建一个非常非常大的 map