# Trait std::hash::Hash [−] [src]

    pub trait Hash {
        fn hash<H>(&self, state: &mut H) where H: Hasher;

        fn hash_slice<H>(data: &[Self], state: &mut H) where H: Hasher { ... }
    }

A hashable type.

The `H` type parameter is an abstract hash state that is used by the `Hash` to compute the hash.

If you are also implementing `Eq`, there is an additional property that is important:

    k1 == k2 -> hash(k1) == hash(k2)

In other words, if two keys are equal, their hashes should also be equal. `HashMap` and `HashSet` both rely on this behavior.

This trait can be used with `#[derive]`.

## Required Methods

### `fn hash<H>(&self, state: &mut H) where H: Hasher`

Feeds this value into the state given, updating the hasher as necessary.

## Provided Methods

### `fn hash_slice<H>(data: &[Self], state: &mut H) where H: Hasher`

Feeds a slice of this type into the state provided.

## Implementors

- `impl<T> Hash for NonZero<T> where T: Zeroable + Hash`
- `impl<Ret> Hash for fn() -> Ret`
- `impl<Ret> Hash for extern "C" fn() -> Ret`
- `impl<Ret> Hash for unsafe fn() -> Ret`
- `impl<Ret> Hash for unsafe extern "C" fn() -> Ret`
- `impl<Ret, A> Hash for fn(A) -> Ret`
- `impl<Ret, A> Hash for extern "C" fn(A) -> Ret`
- `impl<Ret, A> Hash for unsafe fn(A) -> Ret`
- `impl<Ret, A> Hash for unsafe extern "C" fn(A) -> Ret`
- `impl<Ret, A, B> Hash for fn(A, B) -> Ret`
- `impl<Ret, A, B> Hash for extern "C" fn(A, B) -> Ret`
- `impl<Ret, A, B> Hash for unsafe fn(A, B) -> Ret`
- `impl<Ret, A, B> Hash for unsafe extern "C" fn(A, B) -> Ret`
- `impl<Ret, A, B, C> Hash for fn(A, B, C) -> Ret`
- `impl<Ret, A, B, C> Hash for extern "C" fn(A, B, C) -> Ret`
- `impl<Ret, A, B, C> Hash for unsafe fn(A, B, C) -> Ret`
- `impl<Ret, A, B, C> Hash for unsafe extern "C" fn(A, B, C) -> Ret`
- `impl<Ret, A, B, C, D> Hash for fn(A, B, C, D) -> Ret`
- `impl<Ret, A, B, C, D> Hash for extern "C" fn(A, B, C, D) -> Ret`
- `impl<Ret, A, B, C, D> Hash for unsafe fn(A, B, C, D) -> Ret`
- `impl<Ret, A, B, C, D> Hash for unsafe extern "C" fn(A, B, C, D) -> Ret`
- `impl<Ret, A, B, C, D, E> Hash for fn(A, B, C, D, E) -> Ret`
- `impl<Ret, A, B, C, D, E> Hash for extern "C" fn(A, B, C, D, E) -> Ret`
- `impl<Ret, A, B, C, D, E> Hash for unsafe fn(A, B, C, D, E) -> Ret`
- `impl<Ret, A, B, C, D, E> Hash for unsafe extern "C" fn(A, B, C, D, E) -> Ret`
- `impl<Ret, A, B, C, D, E, F> Hash for fn(A, B, C, D, E, F) -> Ret`
- `impl<Ret, A, B, C, D, E, F> Hash for extern "C" fn(A, B, C, D, E, F) -> Ret`
- `impl<Ret, A, B, C, D, E, F> Hash for unsafe fn(A, B, C, D, E, F) -> Ret`
- `impl<Ret, A, B, C, D, E, F> Hash for unsafe extern "C" fn(A, B, C, D, E, F) -> Ret`
- `impl<Ret, A, B, C, D, E, F, G> Hash for fn(A, B, C, D, E, F, G) -> Ret`
- `impl<Ret, A, B, C, D, E, F, G> Hash for extern "C" fn(A, B, C, D, E, F, G) -> Ret`
- `impl<Ret, A, B, C, D, E, F, G> Hash for unsafe fn(A, B, C, D, E, F, G) -> Ret`
- `impl<Ret, A, B, C, D, E, F, G> Hash for unsafe extern "C" fn(A, B, C, D, E, F, G) -> Ret`
- `impl<Ret, A, B, C, D, E, F, G, H> Hash for fn(A, B, C, D, E, F, G, H) -> Ret`
- `impl<Ret, A, B, C, D, E, F, G, H> Hash for extern "C" fn(A, B, C, D, E, F, G, H) -> Ret`
- `impl<Ret, A, B, C, D, E, F, G, H> Hash for unsafe fn(A, B, C, D, E, F, G, H) -> Ret`
- `impl<Ret, A, B, C, D, E, F, G, H> Hash for unsafe extern "C" fn(A, B, C, D, E, F, G, H) -> Ret`
- `impl<Ret, A, B, C, D, E, F, G, H, I> Hash for fn(A, B, C, D, E, F, G, H, I) -> Ret`
- `impl<Ret, A, B, C, D, E, F, G, H, I> Hash for extern "C" fn(A, B, C, D, E, F, G, H, I) -> Ret`
- `impl<Ret, A, B, C, D, E, F, G, H, I> Hash for unsafe fn(A, B, C, D, E, F, G, H, I) -> Ret`
- `impl<Ret, A, B, C, D, E, F, G, H, I> Hash for unsafe extern "C" fn(A, B, C, D, E, F, G, H, I) -> Ret`
- `impl<Ret, A, B, C, D, E, F, G, H, I, J> Hash for fn(A, B, C, D, E, F, G, H, I, J) -> Ret`
- `impl<Ret, A, B, C, D, E, F, G, H, I, J> Hash for extern "C" fn(A, B, C, D, E, F, G, H, I, J) -> Ret`
- `impl<Ret, A, B, C, D, E, F, G, H, I, J> Hash for unsafe fn(A, B, C, D, E, F, G, H, I, J) -> Ret`
- `impl<Ret, A, B, C, D, E, F, G, H, I, J> Hash for unsafe extern "C" fn(A, B, C, D, E, F, G, H, I, J) -> Ret`
- `impl<Ret, A, B, C, D, E, F, G, H, I, J, K> Hash for fn(A, B, C, D, E, F, G, H, I, J, K) -> Ret`
- `impl<Ret, A, B, C, D, E, F, G, H, I, J, K> Hash for extern "C" fn(A, B, C, D, E, F, G, H, I, J, K) -> Ret`
- `impl<Ret, A, B, C, D, E, F, G, H, I, J, K> Hash for unsafe fn(A, B, C, D, E, F, G, H, I, J, K) -> Ret`
- `impl<Ret, A, B, C, D, E, F, G, H, I, J, K> Hash for unsafe extern "C" fn(A, B, C, D, E, F, G, H, I, J, K) -> Ret`
- `impl<Ret, A, B, C, D, E, F, G, H, I, J, K, L> Hash for fn(A, B, C, D, E, F, G, H, I, J, K, L) -> Ret`
- `impl<Ret, A, B, C, D, E, F, G, H, I, J, K, L> Hash for extern "C" fn(A, B, C, D, E, F, G, H, I, J, K, L) -> Ret`
- `impl<Ret, A, B, C, D, E, F, G, H, I, J, K, L> Hash for unsafe fn(A, B, C, D, E, F, G, H, I, J, K, L) -> Ret`
- `impl<Ret, A, B, C, D, E, F, G, H, I, J, K, L> Hash for unsafe extern "C" fn(A, B, C, D, E, F, G, H, I, J, K, L) -> Ret`
- `impl<T> Hash for PhantomData<T> where T: ?Sized`
- `impl Hash for TypeId`
- `impl<T> Hash for [T; 0] where T: Hash`
- `impl<T> Hash for [T; 1] where T: Hash`
- `impl<T> Hash for [T; 2] where T: Hash`
- `impl<T> Hash for [T; 3] where T: Hash`
- `impl<T> Hash for [T; 4] where T: Hash`
- `impl<T> Hash for [T; 5] where T: Hash`
- `impl<T> Hash for [T; 6] where T: Hash`
- `impl<T> Hash for [T; 7] where T: Hash`
- `impl<T> Hash for [T; 8] where T: Hash`
- `impl<T> Hash for [T; 9] where T: Hash`
- `impl<T> Hash for [T; 10] where T: Hash`
- `impl<T> Hash for [T; 11] where T: Hash`
- `impl<T> Hash for [T; 12] where T: Hash`
- `impl<T> Hash for [T; 13] where T: Hash`
- `impl<T> Hash for [T; 14] where T: Hash`
- `impl<T> Hash for [T; 15] where T: Hash`
- `impl<T> Hash for [T; 16] where T: Hash`
- `impl<T> Hash for [T; 17] where T: Hash`
- `impl<T> Hash for [T; 18] where T: Hash`
- `impl<T> Hash for [T; 19] where T: Hash`
- `impl<T> Hash for [T; 20] where T: Hash`
- `impl<T> Hash for [T; 21] where T: Hash`
- `impl<T> Hash for [T; 22] where T: Hash`
- `impl<T> Hash for [T; 23] where T: Hash`
- `impl<T> Hash for [T; 24] where T: Hash`
- `impl<T> Hash for [T; 25] where T: Hash`
- `impl<T> Hash for [T; 26] where T: Hash`
- `impl<T> Hash for [T; 27] where T: Hash`
- `impl<T> Hash for [T; 28] where T: Hash`
- `impl<T> Hash for [T; 29] where T: Hash`
- `impl<T> Hash for [T; 30] where T: Hash`
- `impl<T> Hash for [T; 31] where T: Hash`
- `impl<T> Hash for [T; 32] where T: Hash`
- `impl<T> Hash for Option<T> where T: Hash`
- `impl<T, E> Hash for Result<T, E> where T: Hash, E: Hash`
- `impl Hash for u8`
- `impl Hash for u16`
- `impl Hash for u32`
- `impl Hash for u64`
- `impl Hash for usize`
- `impl Hash for i8`
- `impl Hash for i16`
- `impl Hash for i32`
- `impl Hash for i64`
- `impl Hash for isize`
- `impl Hash for bool`
- `impl Hash for char`
- `impl Hash for str`
- `impl Hash for ()`
- `impl<A> Hash for (A,) where A: Hash`
- `impl<A, B> Hash for (A, B) where B: Hash, A: Hash`
- `impl<A, B, C> Hash for (A, B, C) where A: Hash, C: Hash, B: Hash`
- `impl<A, B, C, D> Hash for (A, B, C, D) where A: Hash, D: Hash, B: Hash, C: Hash`
- `impl<A, B, C, D, E> Hash for (A, B, C, D, E) where A: Hash, B: Hash, C: Hash, D: Hash, E: Hash`
- `impl<A, B, C, D, E, F> Hash for (A, B, C, D, E, F) where F: Hash, C: Hash, A: Hash, B: Hash, D: Hash, E: Hash`
- `impl<A, B, C, D, E, F, G> Hash for (A, B, C, D, E, F, G) where G: Hash, D: Hash, B: Hash, F: Hash, A: Hash, E: Hash, C: Hash`
- `impl<A, B, C, D, E, F, G, H> Hash for (A, B, C, D, E, F, G, H) where D: Hash, F: Hash, E: Hash, B: Hash, H: Hash, G: Hash, C: Hash, A: Hash`
- `impl<A, B, C, D, E, F, G, H, I> Hash for (A, B, C, D, E, F, G, H, I) where F: Hash, I: Hash, H: Hash, D: Hash, G: Hash, A: Hash, C: Hash, E: Hash, B: Hash`
- `impl<A, B, C, D, E, F, G, H, I, J> Hash for (A, B, C, D, E, F, G, H, I, J) where A: Hash, F: Hash, C: Hash, D: Hash, G: Hash, J: Hash, H: Hash, E: Hash, I: Hash, B: Hash`
- `impl<A, B, C, D, E, F, G, H, I, J, K> Hash for (A, B, C, D, E, F, G, H, I, J, K) where D: Hash, I: Hash, C: Hash, G: Hash, J: Hash, K: Hash, B: Hash, F: Hash, A: Hash, E: Hash, H: Hash`
- `impl<A, B, C, D, E, F, G, H, I, J, K, L> Hash for (A, B, C, D, E, F, G, H, I, J, K, L) where J: Hash, H: Hash, D: Hash, L: Hash, A: Hash, K: Hash, C: Hash, E: Hash, I: Hash, B: Hash, G: Hash, F: Hash`
- `impl<T> Hash for [T] where T: Hash`
- `impl<'a, T> Hash for &'a T where T: Hash + ?Sized`
- `impl<'a, T> Hash for &'a mut T where T: Hash + ?Sized`
- `impl<T> Hash for *const T`
- `impl<T> Hash for *mut T`
- `impl<T> Hash for Box<T> where T: Hash + ?Sized`
- `impl<T> Hash for Arc<T> where T: Hash + ?Sized`
- `impl<T> Hash for Rc<T> where T: Hash + ?Sized`
- `impl<K, V> Hash for BTreeMap<K, V> where K: Hash, V: Hash`
- `impl<T> Hash for BTreeSet<T> where T: Hash`
- `impl<'a, B> Hash for Cow<'a, B> where B: Hash + ToOwned + ?Sized`
- `impl<E> Hash for EnumSet<E> where E: Hash`
- `impl<A> Hash for LinkedList<A> where A: Hash`
- `impl Hash for String`
- `impl<T> Hash for Vec<T> where T: Hash`
- `impl<A> Hash for VecDeque<A> where A: Hash`
- `impl<T> Hash for Bound<T> where T: Hash`
- `impl Hash for CString`
- `impl Hash for CStr`
- `impl Hash for OsString`
- `impl Hash for OsStr`
- `impl Hash for FileType`
- `impl Hash for IpAddr`
- `impl Hash for Ipv6MulticastScope`
- `impl Hash for Ipv4Addr`
- `impl Hash for Ipv6Addr`
- `impl Hash for SocketAddr`
- `impl Hash for SocketAddrV4`
- `impl Hash for SocketAddrV6`
- `impl<'a> Hash for Prefix<'a>`
- `impl<'a> Hash for PrefixComponent<'a>`
- `impl<'a> Hash for Component<'a>`
- `impl Hash for PathBuf`
- `impl Hash for Path`
- `impl Hash for Duration`

# Help

## Keyboard Shortcuts

?
  Show this help dialog
S
  Focus the search field
⇤
  Move up in search results
⇥
  Move down in search results
⏎
  Go to active search result

## Search Tricks

Prefix searches with a type followed by a colon (e.g. `fn:`) to restrict the search to a given type.

Accepted types are: `fn`, `mod`, `struct`, `enum`, `trait`, `type`, `macro`, and `const`.

Search functions by type signature (e.g. `vec -> usize`)