C ++序列化/反序列化的std ::地图 从/到文件(C++ Serialize/Deser

2019-08-31 10:51发布

我有一个std ::地图。

我想知道是否能在它写入一个文件(并且还从文件中读取它)等使用的fwrite 1行,或者如果我需要写/读分开的每个值。

我希望,既然是没什么特别的,这是可能的。

Answer 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



Answer 2:

没有一个班轮序列化映射。 您将需要单独写每个键/值对。 这个真没有比for循环要复杂得多,但。

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



文章来源: C++ Serialize/Deserialize std::map from/to file