ベクトル<bool>またはビットセットをファイルに保存するにはどうすればよいですか?
基本的に、私は次のコードでバイナリファイルとしてビットセットを書いています:
boost::dynamic_bitset<boost::dynamic_bitset<>::block_type> filter;
vector<boost::dynamic_bitset<>::block_type> filterBlocks(filter.num_blocks());
//populate vector blocks
boost::to_block_range(filter, filterBlocks.begin());
ofstream myFile(filterFilePath.c_str(), ios::out | ios::binary);
//write out each block
for (vector<boost::dynamic_bitset<>::block_type>::iterator it =
filterBlocks.begin(); it != filterBlocks.end(); ++it)
{
//retrieves block and converts it to a char*
myFile.write(reinterpret_cast<char*>(&*it),
sizeof(boost::dynamic_bitset<>::block_type));
}
myFile.close();
動的ビットセットとto_block_rangeを一時的なベクトルに変換し、ブロックをファイルに出力する方法を使用しました。動作しますが、中間ベクトルを使用するとメモリ使用量が2倍になります(使用されるベクトルはビットセットと同じサイズです)。メモリ使用量を2倍にすることなく、ビットセットをファイルに出力するにはどうすればよいですか?
ブロック単位でビットセットを反復処理できればいいのですが、他の問題を防ぐために、動的ビットセットの作成者はこの種の機能を意図的に省略したようです。別のデータ構造を使用する必要がありますか?コンテキストに役立つ場合は、ブルームフィルターコードでビットセットを使用しています。