Trait std::hash::BuildHasher
pub trait BuildHasher { type Hasher: Hasher; fn build_hasher(&self) -> Self::Hasher; fn hash_one<T>(&self, x: T) -> u64 where T: Hash, { ... } }
A trait for creating instances of Hasher
.
A BuildHasher
is typically used (e.g., by HashMap
) to create Hasher
s for each key such that they are hashed independently of one another, since Hasher
s contain state.
For each instance of BuildHasher
, the Hasher
s created by build_hasher
should be identical. That is, if the same stream of bytes is fed into each hasher, the same output will also be generated.
Examples
use std::collections::hash_map::RandomState; use std::hash::{BuildHasher, Hasher}; let s = RandomState::new(); let mut hasher_1 = s.build_hasher(); let mut hasher_2 = s.build_hasher(); hasher_1.write_u32(8128); hasher_2.write_u32(8128); assert_eq!(hasher_1.finish(), hasher_2.finish());
Associated Types
type Hasher: Hasher
Type of the hasher that will be created.
Required methods
fn build_hasher(&self) -> Self::Hasher
Creates a new hasher.
Each call to build_hasher
on the same instance should produce identical Hasher
s.
Examples
use std::collections::hash_map::RandomState; use std::hash::BuildHasher; let s = RandomState::new(); let new_s = s.build_hasher();
Provided methods
Calculates the hash of a single value.
This is intended as a convenience for code which consumes hashes, such as the implementation of a hash table or in unit tests that check whether a custom Hash
implementation behaves as expected.
This must not be used in any code which creates hashes, such as in an implementation of Hash
. The way to create a combined hash of multiple values is to call Hash::hash
multiple times using the same Hasher
, not to call this method repeatedly and combine the results.
Example
#![feature(build_hasher_simple_hash_one)] use std::cmp::{max, min}; use std::hash::{BuildHasher, Hash, Hasher}; struct OrderAmbivalentPair<T: Ord>(T, T); impl<T: Ord + Hash> Hash for OrderAmbivalentPair<T> { fn hash<H: Hasher>(&self, hasher: &mut H) { min(&self.0, &self.1).hash(hasher); max(&self.0, &self.1).hash(hasher); } } // Then later, in a `#[test]` for the type... let bh = std::collections::hash_map::RandomState::new(); assert_eq!( bh.hash_one(OrderAmbivalentPair(1, 2)), bh.hash_one(OrderAmbivalentPair(2, 1)) ); assert_eq!( bh.hash_one(OrderAmbivalentPair(10, 2)), bh.hash_one(&OrderAmbivalentPair(2, 10)) );
Implementors
impl BuildHasher for RandomState
type Hasher = DefaultHasher
type Hasher = H
© 2010 The Rust Project Developers
Licensed under the Apache License, Version 2.0 or the MIT license, at your option.
https://doc.rust-lang.org/std/hash/trait.BuildHasher.html