How do I allow the STL implementation to pick up my custom types? On MSVC, there is a class std::tr1::hash, which I can partially specialize by using
namespace std { namespace tr1 { template <> struct hash<MyType> { ... }; } }
but is this the recommended way? Moreover, does this work with GCC’s implementation as well? For boost::hash, it’s enough to provide a free function size_t hash_value (const MyType&), is there something similar for the TR1 implementation?
Yes, this will also work for GCC. I’m using it in a bigger project and it works without problems. You could also provide your own custom hashing class for the TR1 containers, but it is specified that std::tr1::hash<> is the default hashing class. Specializing it for custom types seems like the natural way to extend the standard hashing functionality.