1个不稳定版本
0.1.0 | 2023年10月16日 |
---|
#2432 在 数据结构
32KB
520 行
QuickPHF
QuickPHF是一个Rust包,允许您使用基于PTHash完美哈希函数的静态编译时生成的哈希映射和哈希集合。
此包仅包含使用此类结构所需的运行时代码。要生成它们,请查看quickphf_codegen
包。
最低支持的Rust版本是1.56。此包是#![no_std]
并且#![forbid(unsafe_code)]
。
功能
- 提供3种基于完美哈希函数的数据结构:
PhfMap
和PhfSet
,它们模仿标准库HashMap
和HashSet
的不可变接口,以便于使用;以及RawPhfMap
,它是一个不存储其键的哈希映射。 - 查找速度比
phf
快约两倍,构建速度快10倍以上。 - 使用Rust实现王毅的
wyhash
算法进行哈希。 - 使用
quickdiv
包来加速模运算。 - 内存使用非常低:没有未使用的容量,每个条目小于一个字节的开销。
示例
use quickphf::examples::*;
// You can use `PhfMap` or `PhfSet` just like `HashMap` or `HashSet`.
assert_eq!(FOURTH_POWERS_TO_ROOTS.get(&4096), Some(&8));
assert_eq!(FOURTH_POWERS_TO_ROOTS.get(&17), None);
assert!(PRIME_DIGITS.contains(&3));
assert_eq!(PRIME_DIGITS.len(), 4);
// With a `RawPhfMap` you would mostly use the `get` method. Note
// that it directly returns a &T instead of an Option<&T>.
assert_eq!(HOLIDAYS_PER_MONTH.get("jul"), &1);
// If you query for an invalid key, it will silently return an
// arbitrary answer.
let valid_reference = HOLIDAYS_PER_MONTH.get("purple");
性能
通常,quickphf
的查找速度比phf
快约两倍,RawPhfMap
比PhfMap
快,尤其是在较大的哈希映射中。
许可证
许可证为以下之一
- Apache License,Version 2.0,(LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT许可证(LICENSE-MIT 或 https://opensource.org/licenses/MIT)
- zlib许可证(LICENSE-ZLIB 或 https://opensource.org/license/zlib/)
由您自行选择。
贡献
除非您明确表示,否则您根据Apache-2.0许可证定义的任何有意提交以包含在作品中的贡献,将按上述方式多许可证发布,不附加任何额外条款或条件。
依赖项
~97KB