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数据结构

Download history 1792/week @ 2024-03-14 750/week @ 2024-03-21 1102/week @ 2024-03-28 919/week @ 2024-04-04 1067/week @ 2024-04-11 369/week @ 2024-04-18 489/week @ 2024-04-25 979/week @ 2024-05-02 1496/week @ 2024-05-09 2316/week @ 2024-05-16 1087/week @ 2024-05-23 1703/week @ 2024-05-30 673/week @ 2024-06-06 439/week @ 2024-06-13 1307/week @ 2024-06-20 1399/week @ 2024-06-27

4,125 每月下载量
12 个 crate (8 直接) 中使用

MIT/Apache

235KB
6K SLoC

Build Status Build status Crates.io version

阅读文档。

tinyset

tinyset 包含一些针对少量元素进行大小优化的集合,同时仍然在元素数量多时保持良好的时间和(大小)扩展性。我们现在只有几种你可能感兴趣的类型。

  1. Set64 是一个适用于大小为 64 位或更小的且是 Copy 的类型的集合,主要用于基本整数类型。这是我们的最高效类型,因为它可以用一个指针的大小存储小型集合,而不需要堆存储。

  2. SetU64 仅包含 u64 元素,并且是 Set64 的内部存储。

  3. SetU32 仅包含 u32 元素,并且比 SetU64 使用更少的内存。

  4. SetUsize 存储 usize 元素,并使用 [SetU64] 或 [SetU32] 内部。

所有这些集合类型都会为小型集合中的小型元素不做堆分配。在 64 位系统上,每个集合可以存储多达七个元素而不做堆分配,如果元素很小的话。有关实现细节,请参阅 SetU64

这些集合与标准集合的不同之处在于,它们遍历的是项目本身而不是项目的引用,因为它们不会以可引用的方式直接存储值。所有特定类型的集合进一步的区别在于,removecontains接受的是值而不是引用。

此包依赖于rand包(默认启用),用于随机化以避免DOS碰撞攻击。您可以通过禁用此功能来加快编译速度:

tinyset = { version = "0.4", default-features = false }

这将导致使用由系统时间初始化的非常简单的伪随机数生成器。

还有一个可选的依赖项是serde,它以非压缩形式序列化集合。您可以使用以下命令启用此功能:

tinyset = { version = "0.4.13", features = ["serde"] }

还有一个实验性功能compactserde,它以与内存中保持的相同紧凑形式进行序列化。然而,使用的格式是不稳定的,因此您不能期望不同版本的tinyset可以读取序列化的集合。如果您需要一个稳定且紧凑的序列化格式,请提交问题。请注意,损坏(或恶意)的文件可能会轻易触发未定义的行为,而不仅仅是触发错误和混淆的行为。

基准测试

要运行基准测试套件,请运行:

cargo bench

这将为您提供各种集合类型的详细时间和存储要求。

依赖项

~240–475KB