#perfect-hash #hash-map #hashing #no-std #mphf #low-memory

no-std quickphf

基于PTHash完美哈希函数的静态数据结构的运行时代码

1个不稳定版本

0.1.0 2023年10月16日

#2432数据结构


用于 quickphf_codegen

使用Zlib OR Apache-2.0 OR MIT许可证

32KB
520

QuickPHF

Latest Release Documentation Minimum Supported Rust Version 1.56

QuickPHF是一个Rust包,允许您使用基于PTHash完美哈希函数的静态编译时生成的哈希映射和哈希集合。

此包仅包含使用此类结构所需的运行时代码。要生成它们,请查看quickphf_codegen

最低支持的Rust版本是1.56。此包是#![no_std]并且#![forbid(unsafe_code)]

功能

  • 提供3种基于完美哈希函数的数据结构:PhfMapPhfSet,它们模仿标准库HashMapHashSet的不可变接口,以便于使用;以及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快约两倍,RawPhfMapPhfMap快,尤其是在较大的哈希映射中。

许可证

许可证为以下之一

由您自行选择。

贡献

除非您明确表示,否则您根据Apache-2.0许可证定义的任何有意提交以包含在作品中的贡献,将按上述方式多许可证发布,不附加任何额外条款或条件。

依赖项

~97KB