20个版本

使用旧的Rust 2015

0.6.4 2023年9月16日
0.6.3 2020年2月16日
0.6.2 2019年7月26日
0.5.4 2019年1月4日
0.1.3 2017年6月15日

#120数据结构

Download history 5016/week @ 2024-04-21 4890/week @ 2024-04-28 5668/week @ 2024-05-05 5796/week @ 2024-05-12 5891/week @ 2024-05-19 5251/week @ 2024-05-26 6342/week @ 2024-06-02 4957/week @ 2024-06-09 5581/week @ 2024-06-16 6481/week @ 2024-06-23 4047/week @ 2024-06-30 5341/week @ 2024-07-07 6252/week @ 2024-07-14 6250/week @ 2024-07-21 6479/week @ 2024-07-28 6537/week @ 2024-08-04

26,400 每月下载量
179 个crate中使用了(直接使用25个)

MIT/Apache

87KB
2K SLoC

hibitset

Build Status Crates.io

提供分层位集合,允许在稀疏数据结构上非常快速地进行迭代。

使用方法

只需将此添加到您的 Cargo.toml

[dependencies]
hibitset = "0.6"

许可证

本库采用Apache License 2.0授权,有关更多信息,请参阅LICENSE文件


lib.rs:

hibitset

提供分层位集合,允许在稀疏数据结构上非常快速地进行迭代。

它的功能

BitSet 可以被视为类似于 HashSet<u32>。它跟踪某些索引是否存在于其中。然而,其实现方式非常不同。

在本质上,BitSet 依赖于一个位数组,该数组表示索引是否存在。这提供了添加和删除索引的功能。

这个数组被称为层0。在其上方,还有另一层:层1。层1是层0的“摘要”。它包含每个 usize 位的一个位。如果层0中的那个 usize 中的任何位被设置,层1中的位也会被设置。

总共有四层。层1到层3是每一层的摘要。

Example, with an imaginary 4-bit usize:

Layer 3: 1------------------------------------------------ ...
Layer 2: 1------------------ 1------------------ 0-------- ...
Layer 1: 1--- 0--- 0--- 0--- 1--- 0--- 1--- 0--- 0--- 0--- ...
Layer 0: 0010 0000 0000 0000 0011 0000 1111 0000 0000 0000 ...

该方法使得在整个 BitSet 上进行的操作(如并集、交集和迭代)非常快速(因为如果任何摘要层的任何位为零,可以跳过其下整个位域范围。)

然而,索引大小有一个最大限制。BitSet 的顶层(第 3 层)是一个单一的 usize。这使得最大索引为 usize**4(对于 32 位 usize1,048,576,对于 64 位 usize16,777,216)。尝试添加比这更大的索引将导致 BitSet 发生 panic。

依赖关系

~0–265KB