1 unstable release
0.4.1 | Mar 10, 2022 |
---|
#61 in #seed
Used in 3 crates
(2 directly)
150KB
2.5K
SLoC
A suite of non-cryptographic hash functions for Rust.
Example
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"));
By default, HashMap
uses a hashing algorithm selected to
provide resistance against HashDoS
attacks.
The hashing algorithm can be replaced on a per-HashMap
basis
using the HashMap::with_hasher
or
HashMap::with_capacity_and_hasher
methods.
It also cowork with HashMap
or HashSet
, act as a hash function
use std::collections::HashSet;
use fasthash::spooky::Hash128;
let mut set = HashSet::with_hasher(Hash128);
set.insert(2);
Or use RandomState<CityHash64>
with a random seed.
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");
Dependencies
~7MB
~96K SLoC