38 个版本
0.4.15 | 2022年9月25日 |
---|---|
0.4.10 | 2022年2月9日 |
0.4.8 | 2021年12月15日 |
0.4.6 | 2021年7月23日 |
0.0.12 | 2017年7月6日 |
#169 在 数据结构
4,125 每月下载量
在 12 个 crate (8 直接) 中使用
235KB
6K SLoC
tinyset
tinyset
包含一些针对少量元素进行大小优化的集合,同时仍然在元素数量多时保持良好的时间和(大小)扩展性。我们现在只有几种你可能感兴趣的类型。
-
Set64
是一个适用于大小为 64 位或更小的且是Copy
的类型的集合,主要用于基本整数类型。这是我们的最高效类型,因为它可以用一个指针的大小存储小型集合,而不需要堆存储。 -
SetUsize
存储usize
元素,并使用 [SetU64] 或 [SetU32] 内部。
所有这些集合类型都会为小型集合中的小型元素不做堆分配。在 64 位系统上,每个集合可以存储多达七个元素而不做堆分配,如果元素很小的话。有关实现细节,请参阅 SetU64
。
这些集合与标准集合的不同之处在于,它们遍历的是项目本身而不是项目的引用,因为它们不会以可引用的方式直接存储值。所有特定类型的集合进一步的区别在于,remove
和contains
接受的是值而不是引用。
此包依赖于rand
包(默认启用),用于随机化以避免DOS碰撞攻击。您可以通过禁用此功能来加快编译速度:
tinyset = { version = "0.4", default-features = false }
这将导致使用由系统时间初始化的非常简单的伪随机数生成器。
还有一个可选的依赖项是serde
,它以非压缩形式序列化集合。您可以使用以下命令启用此功能:
tinyset = { version = "0.4.13", features = ["serde"] }
还有一个实验性功能compactserde
,它以与内存中保持的相同紧凑形式进行序列化。然而,使用的格式是不稳定的,因此您不能期望不同版本的tinyset
可以读取序列化的集合。如果您需要一个稳定且紧凑的序列化格式,请提交问题。请注意,损坏(或恶意)的文件可能会轻易触发未定义的行为,而不仅仅是触发错误和混淆的行为。
基准测试
要运行基准测试套件,请运行:
cargo bench
这将为您提供各种集合类型的详细时间和存储要求。
依赖项
~240–475KB