#![allow(dead_code, deprecated, unused_variables, unused_mut)] use std::cmp::{max, min}; use std::hash::{BuildHasher, Hash, Hasher}; struct OrderAmbivalentPair(T, T); impl Hash for OrderAmbivalentPair { fn hash(&self, hasher: &mut H) { min(&self.0, &self.1).hash(hasher); max(&self.0, &self.1).hash(hasher); } } fn main() { let bh = std::hash::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)) ); }