今回はhashの特殊化方法について質問があります。
例えば自作クラスに対してhashを特殊化する場合は
class MyClass//自作クラス
{
public:
int x;
};
template<>
struct std::hash<MyClass>
{
size_t operator()(const MyClass &obj)
{
rerturn obj.x;
}
};
ここで自作クラスがテンプレートクラスだった場合はどのように書けばよいのでしょうか?
特に自作クラスが2つ以上の型を扱う場合について教えてもらいたいです。
template<typename T,typename U>
class MyClass//自作クラス
{
public:
T x;
U y;
};
template<typename T,typename U>//テンプレート引数が多いためエラー
struct std::hash<MyClass<T,U>>
{
size_t operator()(const MyClass<T,U> &obj)
{
rerturn (size_t)obj.x;
}
};
template<>
struct std::hash<MyClass<T,U>>//T,Uが定義されていないためエラー
{
size_t operator()(const MyClass<T,U> &obj)
{
rerturn (size_t)obj.x;
}
};
pair<T,U>(T、Uはテンプレート引数)をキーとしてgoogleのsparse_hash_mapを使おうと思っています。
そこでpair<T,U>に対するhash関数を作成しようと思いましたがhashの特殊化ができずに困っております^^;