Я пытался выработать точный синтаксис для этого с неупорядоченными ассоциативными контейнерами (также используя GCC, как спрашивал ОП) и задал этот вопрос.
К сожалению, он не опустился до уровня детализации, который я хотел. Просматривая заголовки gcc о том, как они реализовали стандартные хеш-функции, я понял, как это работает.
Ввиду нехватки примеров (по крайней мере, на момент написания) в Интернете, я подумал, что это будет хорошим местом для публикации моего собственного примера (который я могу подтвердить работами с GCC):
namespace std { namespace tr1
{
template <>
struct hash<MyType> : public unary_function<MyType, size_t>
{
size_t operator()(const MyType& v) const
{
return /* my hash algorithm */;
}
};
}}
(обратите внимание, там - это два пространства имен здесь - это просто мое соглашение для свертывания вложенных пространств имен)