W3cubDocs

/Rust

Module std::hash

Generic hashing support.

This module provides a generic way to compute the hash of a value. The simplest way to make a type hashable is to use #[derive(Hash)]:

Examples

use std::hash::{Hash, SipHasher, 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!(hash(&person1) != hash(&person2));

fn hash<T: Hash>(t: &T) -> u64 {
    let mut s = SipHasher::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::{Hash, Hasher, SipHasher};

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!(hash(&person1), hash(&person2));

fn hash<T: Hash>(t: &T) -> u64 {
    let mut s = SipHasher::new();
    t.hash(&mut s);
    s.finish()
}

Structs

BuildHasherDefault

The BuildHasherDefault structure is used in scenarios where one has a type that implements Hasher and Default, but needs that type to implement BuildHasher.

SipHasher [
Deprecated
]

An implementation of SipHash 2-4.

SipHasher13 [
Deprecated
] [
Experimental
]

An implementation of SipHash 1-3.

SipHasher24 [
Deprecated
] [
Experimental
]

An implementation of SipHash 2-4.

Traits

BuildHasher

A BuildHasher is typically used as a factory for instances of Hasher which a HashMap can then use to hash keys independently.

Hash

A hashable type.

Hasher

A trait which represents the ability to hash an arbitrary stream of bytes.

© 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/index.html