私はstd :: mapを持っています。C++ std :: mapをシリアライズ/デシリアライズ from/toファイル
私はfwriteを使って1行のようにファイルに書き込むことができますか(ファイルから読み込むこともできますか)、あるいは各値を別々に読み書きする必要があるかどうかを知りたいと思います。
私は、何も特別なことはないので、これが可能かもしれないと考えていました。
私はstd :: mapを持っています。C++ std :: mapをシリアライズ/デシリアライズ from/toファイル
私はfwriteを使って1行のようにファイルに書き込むことができますか(ファイルから読み込むこともできますか)、あるいは各値を別々に読み書きする必要があるかどうかを知りたいと思います。
私は、何も特別なことはないので、これが可能かもしれないと考えていました。
boost::serialization
を1行でシリアライズします。そのため ヘッダー:
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
を使用して、代わりにtext_archive
のbinary_archive
であってもよいです。
マップをシリアル化するためのワンライナーはありません。それぞれのキーと値のペアを個別に記述する必要があります。しかしこれはforループよりもはるかに複雑ではありません。
ブーストを使用すると、方法があるかもしれませんが、私は正確なAPIに精通していません。
シリアル化は完全に簡単な作業ではありません。しかしそれは前に行われています。例えば、[boost :: serialization](http://www.boost.org/doc/libs/1_53_0/libs/serialization/doc/index.html)を見てください。 'std :: maps'を含むstdライブラリコンテナをシリアライズする準備が整ったコードが付属しています。 – juanchopanza
'fwrite'はC-ismです。 –