gpt4 book ai didi

C++ 将 dynamic_bitset 存储到文件中

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:18:52 27 4
gpt4 key购买 nike

跟进 How does one store a vector<bool> or a bitset into a file, but bit-wise?

基本上,我使用以下代码将位集编写为二进制文件:

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的方法变成一个临时 vector ,然后打印出 block 到文件中。它有效,但当我使用中间 vector 时,我的内存使用量加倍(使用的 vector 与我的位集大小相同)。如何在不增加内存使用量的情况下将位集打印到文件?

如果我能以 block 的形式遍历 bitset 就好了,但似乎为了防止一些其他问题,dynamic bitset 的作者故意省略了这种功能。我应该使用不同的数据结构吗?如果它对上下文有帮助,我将在一些布隆过滤器代码中使用位集。

最佳答案

你应该手动完成。迭代这些位,将它们打包成 unsigned char s 和 stream.put将字符放入文件中。

直接写原生block_type导致文件格式依赖于平台特定的字节顺序,这通常是不可取的。 (并将 block_type 设置为 char 会损害性能。)

看看您的其他问题,我发现这与 Nawaz 的建议相同,您可能想返回使用 std::vector<bool>相反。

关于C++ 将 dynamic_bitset 存储到文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13504314/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com