#include struct my_key { int m_i; my_key() : m_i(0){}; bool operator==(const my_key &rhs) const { return m_i == rhs.m_i; } operator std::size_t () const { return m_i; } }; namespace std { namespace tr1 { template<> struct hash { std::size_t operator()(const my_key& r) const { return (std::size_t)r; } }; } // namespace tr1 } // namespace std int main() { return 0; }