1 个不稳定版本
0.4.1 | 2022年3月10日 |
---|
#58 in #seed
在 3 个crate(2 个直接) 中使用
150KB
2.5K SLoC
一套非加密哈希函数的Rust实现。
示例
use std::hash::{Hash, Hasher};
use fasthash::{metro, MetroHasher};
fn hash<T: Hash>(t: &T) -> u64 {
let mut s: MetroHasher = Default::default();
t.hash(&mut s);
s.finish()
}
let h = metro::hash64(b"hello world\xff");
assert_eq!(h, hash(&"hello world"));
默认情况下,HashMap
使用一种选择的哈希算法来提供对 HashDoS
攻击的抵抗力。可以通过使用 HashMap::with_hasher
或 HashMap::with_capacity_and_hasher
方法在 HashMap
的基础上替换哈希算法。
它还可以与 HashMap
或 HashSet
协同工作,作为哈希函数
use std::collections::HashSet;
use fasthash::spooky::Hash128;
let mut set = HashSet::with_hasher(Hash128);
set.insert(2);
或使用带随机种子的 RandomState<CityHash64>
use std::collections::HashMap;
use fasthash::{city, RandomState};
let s = RandomState::<city::Hash64>::new();
let mut map = HashMap::with_hasher(s);
assert_eq!(map.insert(37, "a"), None);
assert_eq!(map.is_empty(), false);
map.insert(37, "b");
assert_eq!(map.insert(37, "c"), Some("b"));
assert_eq!(map[&37], "c");
依赖
~8MB
~113K SLoC