#hash-map #byte #byte-size

single_byte_hashmap

用于存储单个字节的简单HashMap

3个版本

0.1.2 2021年7月1日
0.1.1 2021年6月29日
0.1.0 2021年6月29日

#2455 in 数据结构

MIT 许可证

8KB

单字节哈希表

一个非常简单的HashMap,其键仅是字节

本质上,这个包只是一个HashMap,除了哈希函数实际上就是写入要哈希的值。其优点是HashMap本身非常非常快。我没有做任何基准测试,但我猜测它可能比标准库版本快数百倍,以及任何其他不进行极其相似处理的实现。至少,它肯定 更快

然而,巨大的缺点是,对于任何其他不是单个字节的输入,这都很糟糕。它肯定不能防止冲突,而且我不确定它是否容易受到任何DoS攻击。因此,我添加了一个小的调试断言,强制HashMap只用于单个字节输入,而不用于其他任何输入。

我花半小时左右为另一个我正在做的一个项目(为了速度改进)做了这个,并认为最好分享这个。如果你担心安全性或需要超过字节的键值的HashMap,请不要使用这个crate,因为这个crate唯一有用的就是速度快。

这个crate的功能只是启用了HashBrown中的一些功能,因为它是标准库HashMap的更快实现。《code>faster_hashmap》功能只是使用HashBrown而不是std HashMap,并且默认启用。

使用方法

使用这个crate几乎与std HashMap完全相同(唯一的区别是你需要指定哈希器)

use single_byte_hashmap::*;

let player_score: HashMap<u8, u16> = HashMap::with_capacity_and_hasher(256, BuildHasher::default());
player_score.insert(0, 2000);
player_score.insert(1, 3000);

for (player_id, score) in player_score.iter() {
   println!("Player {} has a score of {}", player_id, score);

}

依赖项

~0–530KB