unordered_map 컨테이너의 키로 std :: pair 쌍을 사용하려고하지만 사용자 정의 해시 함수를 정의하는 데 어려움이 있습니다.unordered_map 키로 사용되는 enum 값 쌍의 사용자 정의 해시 함수
//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);
}
};
하지만 난 VS 컴파일러에 오류 C3840 (expression having type 'type' would lose some const-volatile qualifiers in order to call 'function'
)를 얻을 : 나는 다음 시도했다.
누구나 unordered_map과 함께 사용할 사용자 정의 해시 함수를 선언하는 올바른 방법을 제안 할 수 있습니까?
을 당신은 단지 펑터 함수를 호출하여 변경하도록 지정하기 위해 함수 정의에 뒤에 const를 누락하지 있습니까? –
예, 문제를 일으키는 const 지정자가 누락 된 것 같습니다. – Heisenbug