我正在尝试使用 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 一起使用的自定义哈希函数?