enum 値の std::pair を unordered_map コンテナーのキーとして使用しようとしていますが、カスタム ハッシュ関数を定義するのが困難です。
私は次のことを試しました:
//enum and pair declaration
enum ShapeType{PLANE, BOX, SPHERE};
typedef std::pair<ShapeType,ShapeType> ShapePair;
//unordered_map declaration
typedef void(*CollisionMethod)(const Shape*, const Shape*, CollisionData*);
typedef std::unordered_map<ShapePair, CollisionMethod,ShapePairHash> CollisionMethodsTable;
ShapePairHash ファンクターを正しく定義する方法がわかりません。私は次のことを試しました:
struct ShapePairHash
{
std::size_t operator()(const ShapePair &pair)
{
return std::hash<std::size_t>()(pair.first) ^ std::hash<std::size_t>()(pair.second);
}
};
expression having type 'type' would lose some const-volatile qualifiers in order to call 'function'
しかし、VS コンパイラでエラー C3840 ( ) が発生します。
unordered_map で使用するカスタム ハッシュ関数を宣言する正しい方法を教えてくれる人はいますか?