【发布时间】:2012-11-10 08:33:29
【问题描述】:
对How does one store a vector<bool> or a bitset into a file, but bit-wise?的某种跟进
基本上我正在使用以下代码将 bitset 编写为二进制文件:
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();
我使用动态bitset和to_block_range的方法变成一个临时向量,然后将块打印到文件中。它有效,但是当我使用中间向量(使用的向量与我的位集大小相同)时,我的内存使用量增加了一倍。如何在不增加内存使用量的情况下将 bitset 打印到文件中?
如果我能以块为单位遍历 bitset,那就太好了,但似乎为了防止其他一些问题,动态 bitset 的作者故意省略了这种功能。我应该使用不同的数据结构吗?如果对上下文有帮助,我将在一些布隆过滤器代码中使用位集。
【问题讨论】:
-
@Potatoswatter 是的。我应该更清楚。
标签: c++ vector binaryfiles bloom-filter boost-dynamic-bitset