순서가 지정되지 않은 컨테이너의 사용자 정의 유형에 대한 std::hash 전문화
std::unordered_set에서 사용자 정의 키 유형 사용을 활성화하려면 및 std::unordered_map의 경우 항등 연산자와 해시 함수를 모두 제공해야 합니다. 여기에는 일반적으로 이러한 연산자를 구현하는 사용자 정의 구조체 또는 클래스를 정의하는 작업이 포함됩니다. 다만, 컴파일러나 라이브러리에서 제공하는 내장형과 유사하게 사용자 정의형에 대해서는 기본 해시함수를 사용하는 것이 더 편리할 것입니다.
C Standard Draft N3242 및 Boost.Unordered에 따르면 , 사용자 정의 유형에 대해 std::hash를 특수화하는 것이 가능합니다. 여기에는 std 네임스페이스에 특수화를 추가하는 작업이 포함됩니다.
namespace std { template <> inline size_t hash<X>::operator()(const X& x) const { return hash<int>()(x.id); } }
이 예에서 X 유형의 해시 함수는 X에 멤버 변수 ID가 있다고 가정하는 int 유형의 해시 함수를 사용하도록 특수화되었습니다. 해시 함수는 특정 템플릿 인수 유형에 맞게 특화되어야 하며 결과 해시 값은 해당 유형에 대한 등호 연산자와 일치해야 한다는 점에 유의하는 것이 중요합니다.
합법성 및 이식성:
namespace std { template <> struct hash<X> { size_t operator()(const X& x) const { return hash<int>()(x.id); } }; }
위 내용은 C에서 사용자 정의 유형에 대해 `std::hash`를 어떻게 전문화할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!