我有一個std :: map。C++序列化/反序列化std :: map <int,int> from/to文件
我想知道我是否可以用fwrite將它寫入文件(也可以從文件中讀取它),或者如果我需要分別寫入/讀取每個值。
我希望既然沒什麼特別的,這可能是可能的。
我有一個std :: map。C++序列化/反序列化std :: map <int,int> from/to文件
我想知道我是否可以用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;
}
輸出:代替text_archive
g++ -o new new.cpp -std=c++0x -lboost_serialization
./new
1
用於文件簡單地使用std::ifstream/std::ofstream
代替std::stringstream
並且可以是binary_archive
,。
沒有一行可以序列化地圖。您需要分別編寫每個鍵/值對。不過,這實際上並不比for循環複雜得多。
使用boost,可能有辦法,但我不熟悉確切的API。
序列化並不是一項完全平凡的任務。但之前已經完成。例如,查看[boost :: serialization](http://www.boost.org/doc/libs/1_53_0/libs/serialization/doc/index.html)。它帶有現成的代碼來序列化std庫容器,包括'std :: maps'。 – juanchopanza 2013-04-18 06:31:19
'fwrite'是一個C-ism。 – 2013-04-18 06:56:48