0
私はブーストライブラリを使ってstd :: mapをシリアル化し、ファイルに保存できるようにしようとしています。しかし、私はとても奇妙な行動をしている(私は推測する)。だからここに私のコードです:ブーストライブラリを使ったシリアライズ
#include <map>
#include <fstream>
#include <iostream>
#include <bitset>
#include <boost/serialization/map.hpp>
#include <boost/archive/text_iarchive.hpp>
#include <boost/archive/text_oarchive.hpp>
std::map<int,int> map = {{65,2}, {69,1}, {75,1} ,{77,1}, {82,1}, {84,2}, {89,2}};
void saveMapToFile(std::ofstream& f);
int main()
{
std::ofstream f("test.txt", std::ios::binary);
saveMapToFile(f);
std::cout << "position: " << f.tellp() << std::endl;
}
void saveMapToFile(std::ofstream& f)
{
std::cout << "position : " << f.tellp() << std::endl;
boost::archive::text_oarchive oarch(f);
std::cout << "position : " << f.tellp() << std::endl;
oarch << map;
std::cout << "position : " << f.tellp() << std::endl;
}
そしてここでは、上記のコードの出力です:
position : 0
position : 28
position : 75
position: 76
だから誰かがここで何が起こっているのか私に説明できますか?それ以外の場所に地図を置いた後の位置はなぜですか?私は追加のopperationsをしていない、まだそのポインタは1バイト進む...私は何かを欠いている?あなたの助けを前もってありがとう。
ええ、私はそれを理解していますが、なぜそれが矛盾しているのか分かりません。私はそのマップの後に他のデータをファイルに保存したいのですが、それに問題があります。どこでそのストアを実行する必要がありますか? '' saveMapToFile() '' 'という関数で他のデータを保存すると、75番目のバイトから開始し、それ以外の場合は76番目のバイトになります。その後、私が地図を読んだ後、ポインタの位置は常に75番目のバイトになりますが、他のデータは76番目のバイトから始まるかもしれません。その瞬間に私は確かにデータを読み始めるか次のバイトに移動しなければなりません。読んでください。私は分かりません。 –
保存機能にストリームを渡すのではなく、アーカイブを渡す必要があります。 – sehe
[この回答](https://stackoverflow.com/a/28395831/85371)の一番下のリンクも参照してください:[多態的なテキストアーカイブよりも多くのものを出力する](http://stackoverflow.com/questions/ 27422557/more-more-a-polymorphic-text-archive/27424381#27424381)と[ストリームはアーカイブではありません](http://www.boost.org/doc/libs/1_51_0/libs/serialization/) doc /) – sehe