2016-10-31 5 views
1

boost :: archive :: text_oarchiveでシリアル化されてファイルに保存されたstd :: mapの部分的な直列化を行う方法はありますか? たとえば、キーが整数で、値が構造体であるため、最初に100個のレコードをロードし、次に100個のレコードをロードするなど、大きなシリアライズおよび保存されたマップがあります。 それを行うためのlibs、boostクラス、または解決策がありますか?std :: mapの部分非直列化

+0

なぜあなたはなぜそれを戻す必要がありますか?あなたのスレッドが縛られないようにしたい場合は、別のスレッドを開始して、それを実行して信号を出します。 – UKMonkey

+0

シリアル化されたマップが大きすぎるため、時にはデシリアライズしようとするときに問題が発生することがあります。 1つの部分でメモリに入れます。 – aleksssandr

+0

その場合、Donghuiが答えを出しました。逆シリアル化できるマシンを見つけて、新しいモジュラーデザインと一致する新しいフォーマットで再シリアル化する必要があります。 – UKMonkey

答えて

1

通常、serializeとdeserializeの両方に同じserialize()関数が呼び出されます。あなたがそれを部分的に取り戻すには、最初に部分的に直列化する必要があります。

+0

答えがありがとうございます。残念ながら、私たちは既に大きなシリアル化されたマップを持っています。そして、私たちはそれをある部分にロードしようとしているときに問題に直面しています。 – aleksssandr

+3

簡単な解決策は、マップ全体をデシリアライズして部品をコピーアウトすることです。ハードコアの解決策は、おそらくマップのシリアル化方法とキーと値の型のシリアライズ方法のソースコードを調べることで、シリアル化された結果のフォーマットを理解し、特別なデシリアライズ機能を記述することです。私はそれが可能だと信じていますが、私はそのアプローチを選択することを強くお勧めします。 –

+1

私はDonghui Zhangと一緒にいます – sehe

関連する問題