#hasher #hash #hashing #seed #function

fasthash-fork

一套非加密哈希函数的Rust实现 - 支持代码库的发布

1 个不稳定版本

0.4.1 2022年3月10日

#58 in #seed


3 个crate(2 个直接) 中使用

Apache-2.0

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_hasherHashMap::with_capacity_and_hasher 方法在 HashMap 的基础上替换哈希算法。

它还可以与 HashMapHashSet 协同工作,作为哈希函数

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