Expand description
Generic hashing support.
This module provides a generic way to compute the hash of a value.
Hashes are most commonly used with HashMap
and HashSet
.
The simplest way to make a type hashable is to use #[derive(Hash)]
:
§Examples
use std::hash::{DefaultHasher, Hash, Hasher};
#[derive(Hash)]
struct Person {
id: u32,
name: String,
phone: u64,
}
let person1 = Person {
id: 5,
name: "Janet".to_string(),
phone: 555_666_7777,
};
let person2 = Person {
id: 5,
name: "Bob".to_string(),
phone: 555_666_7777,
};
assert!(calculate_hash(&person1) != calculate_hash(&person2));
fn calculate_hash<T: Hash>(t: &T) -> u64 {
let mut s = DefaultHasher::new();
t.hash(&mut s);
s.finish()
}
If you need more control over how a value is hashed, you need to implement
the Hash
trait:
use std::hash::{DefaultHasher, Hash, Hasher};
struct Person {
id: u32,
name: String,
phone: u64,
}
impl Hash for Person {
fn hash<H: Hasher>(&self, state: &mut H) {
self.id.hash(state);
self.phone.hash(state);
}
}
let person1 = Person {
id: 5,
name: "Janet".to_string(),
phone: 555_666_7777,
};
let person2 = Person {
id: 5,
name: "Bob".to_string(),
phone: 555_666_7777,
};
assert_eq!(calculate_hash(&person1), calculate_hash(&person2));
fn calculate_hash<T: Hash>(t: &T) -> u64 {
let mut s = DefaultHasher::new();
t.hash(&mut s);
s.finish()
}
Re-exports§
pub use self::random::DefaultHasher;
pub use self::random::RandomState;
Modules§
- random 🔒
- This module exists to isolate
RandomState
andDefaultHasher
outside of thecollections
module without actually publicly exporting them, so that parts of that implementation can more easily be moved to thealloc
crate.
Structs§
- Build
Hasher Default - Used to create a default
BuildHasher
instance for types that implementHasher
andDefault
. - SipHasher
Deprecated - An implementation of SipHash 2-4.
Traits§
- Build
Hasher - A trait for creating instances of
Hasher
. - Hash
- A hashable type.
- Hasher
- A trait for hashing an arbitrary stream of bytes.
Derive Macros§
- Hash
- Derive macro generating an impl of the trait
Hash
.