1 个不稳定版本
使用旧的 Rust 2015
0.1.0 | 2018年1月16日 |
---|
#2123 在 数据结构
14KB
244 行
Lil'Bits
用途
在某些情况下,即使是简单的 HashMap<T>
对于应用程序来说也太多。LilBitsSet
受到 smallset
、sparseset
和 bitmap
等作品的影响,但非常简单,只有一个功能非常出色:当值永远不会 > 63
时,它实现了 HashSet<u8>
的语义。
我个人计划在我的服务器客户端库中使用它,用户可以选择向客户端的 LilBitSet
广播。由于一次最多只有 ~10 个用户在线,因此 LilBitSet
是处理与这些客户端及其对应 ID 相关的对象的完美选择。
实用性
与其他集合相比,这种数据结构有两个严重的限制
- 只能存储
u8
(或任何可以as
u8 的整数) - 不能存储值
>= 64
。这与smallset
不同,其中限制在于元素的 数量,而不是元素的 值。如果这些限制对于您的目的来说是决定性的,则最好使用smallset
或类似的数据结构。否则,LilBitSet
具有一些出色的特性
- 超级快的
insert
等基本操作 - 超级快的
Clone
和Copy
- trivially benefits from obvious
Sized
、Sync
、Serialize
、Deserialize
等。 - 依赖于超级快的位操作(例如,
union
到|
)的集合逻辑
此外,还有一个便利的宏 lilbits!
用于构建 LilBitSet
,以及一些可能有用的 From
实现,用于将其他常见的集合 HashSet
、BTreeSet
转换为和从 LilBitSet
。
自行使用
LilBitSet
的语义类似于 HashSet<u8>
,只是缺少一些不实用的函数,例如 new_with_capacity
。
最值得注意的是,如果尝试插入一个大于 63 的 u8 值,线程将 Panic!
。如果这种行为不受欢迎,只需用 if
检查来保护它。我避免了自己实现它,因为这只会使 API 扩大。
示例
请参阅 tests.rs
以查看带注释的示例。
依赖项
~0.4–1MB
~24K SLoC