14个不稳定版本 (3个破坏性更新)
使用旧版Rust 2015
0.4.0 | 2019年3月13日 |
---|---|
0.3.2 | 2018年8月6日 |
0.3.1 | 2018年7月28日 |
0.2.8 | 2018年1月22日 |
0.1.1 | 2016年12月25日 |
#1847 in 算法
9,915 每月下载量
在 25 个crate中使用了 (23个直接使用)
1MB
30K 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");