适用于bitsets或bitarray的好库

时间:2010-10-29 14:31:33

标签: c++ bitset

你好, 我正在寻找一些适合bitset或bitarrays的好库。任何人都知道更好的东西(或者在所有情况下都不会更糟)然后boost :: dynamic_bitset?无论图书馆是开源还是商业。

在我的项目中,存储和使用包含较少数量的大位掩码是一项常见任务。所以它们可以很好地压缩在内存中。

3 个答案:

答案 0 :(得分:6)

有几种可用的压缩比特矢量实现。它们通常具有运行长度编码和/或/ xor / not操作,这些操作适用于压缩格式。

所以好处是:

  • 较小的空间使用量(对于稀疏位集,如在您的用例中)
  • 非常快的位操作(因为它们处理单词并且对cpu缓存更友好)

并且有缺点:

  • 较慢的位访问(在特定位置查找位需要迭代)

我知道的一些实现(我确信还有其他实现):

Fastbit 实际上是一个使用bitvector索引的数据库。压缩的bitvector类可以直接使用(没有索引)

Lemur bitmapindex Fastbit引入的EWAH编码的另一种实现

Compressed bitvector by koen.vandamme 从未尝试过......但只有两个标题和一个cpp文件。所以不费吹灰之力。

Bitmagic 完整的封装实现了几个压缩的bitvector,包括硬件支持(sse2,...)


希望这会有所帮助,

罗兰

答案 1 :(得分:0)

MiniSAT库怎么样?

http://minisat.se/

我记得这有一个简单的位数实现。

答案 2 :(得分:0)

如果您正在寻找的是空间优化,那么std :: vector提供了针对空间优化的矢量特化。

http://www.cplusplus.com/reference/stl/vector/

和C ++标准23.2.5

不知道这是否比boost:dynamic_bitset更好,但是如果你还没有调查它,那么值得研究一下。