정렬되지 않은 컨테이너의 사용자 정의 유형에 대한 std::hash 전문화
std::unordered_set 및 std::unordered_map과 같은 정렬되지 않은 컨테이너에서 지원 사용자 정의 키 유형에는 연산자==와 해싱 펑터를 모두 제공해야 합니다. 사용자 정의 해시 펑터를 사용하는 것이 편리하지만 내장 유형과 유사한 사용자 정의 유형에 대한 기본 해시를 갖는 것도 바람직합니다.
이를 달성하려면 std::hash
합법성
std 네임스페이스 내에서 전문화를 지정하는 것이 허용되며 실제로 이러한 경우에 권장됩니다. 좋다 this.
Compliance
std::hash를 특수화하는 올바른 방법은 std 네임스페이스 내에 사용자 정의 구조체를 정의하는 것입니다. 다음 코드 조각은 올바른 구문을 보여줍니다.
namespace std { template <> struct hash<Foo> { size_t operator()(const Foo &x) const { // Hashing logic for custom type } }; }
이식성
std::hash를 특수화하는 이 방법은 g 및 MSVC와 같은 주요 컴파일러에서 이식 가능합니다.
추가 기능
std::hash 외에도 std::less, std::equal_to 및 std::swap과 같은 다른 기능을 특수화하여 사용자 정의 유형으로 기능을 강화할 수도 있습니다.
결론
std::hash를 특화하여 하나 정렬되지 않은 컨테이너의 사용자 정의 유형에 대한 기본 해시 함수를 제공할 수 있으므로 표준 라이브러리 컨테이너에서 더 편리하게 사용할 수 있습니다. 이 접근 방식은 C 11 표준을 준수하면서 합법적이고 이식성이 뛰어납니다.
위 내용은 C 비순차 컨테이너의 사용자 정의 유형에 대한 기본 해시 함수를 어떻게 제공할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!