3个版本
0.1.2 | 2021年7月1日 |
---|---|
0.1.1 | 2021年6月29日 |
0.1.0 | 2021年6月29日 |
#2455 in 数据结构
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