1 个稳定版本
1.0.8 | 2022年5月19日 |
---|---|
1.0.7 |
|
0.1.0 |
|
1888 在 数据结构 中
每月下载量 23
44KB
1K SLoC
implhm
处理碰撞的 HashMap 的简化库
入门指南
将 implhm 放入你的 Cargo.toml
[dependencies]
implhm = "1.0.8"
功能
处理碰撞有多种不同的方法。 implhm 提供了最基本实现。以下功能可用:
- 分离链表 (默认)
- 开放寻址
- 双重散列
- 线性探测
- 二次探测
- 分离链表测试
- 开放寻址测试
- 双重散列测试
- 线性探测测试
- 二次探测测试
以下是一个使用单个功能的示例
[dependencies]
implhm = { version = "1.0.8", default-features = false, features = ["quadratic-probing"] }
用法
使用两个字符串的基本散列碰撞示例
use std::{
collections::hash_map::DefaultHasher,
hash::{Hash, Hasher},
};
fn hash<T: Hash>(key: T) -> u64 {
let mut state = DefaultHasher::new();
key.hash(&mut state);
state.finish() % 17
}
fn main() {
/*
When passed through the `hash` function,
`orange` and `blueberry` both equal `8`
*/
let a = hash("orange");
let b = hash("blueberry");
/*
If *collision* isn't handled, then the *value*
("orange") at the location of the *key* (`8`)
would be replaced with the *value* ("blueberry")
*/
assert_eq!(a, b)
}
在这里,碰撞完全由 分离链表 处理
use implhm::{Map, MapMut, SCHashMap};
fn main() {
let mut map = SCHashMap::default();
map.insert("orange", "ORANGE");
map.insert("blueberry", "BLUEBERRY");
/*
In the case of *separate chaining*, collision is
handled by placing any key-pairs that calculate to
the same hash into an ordered list at that index.
*/
assert_eq!(map.get("orange"), Some(&"ORANGE"));
assert_eq!(map.get("blueberry"), Some(&"BLUEBERRY"));
}