> 백엔드 개발 > C++ > C 비순차 컨테이너의 사용자 정의 유형에 대한 기본 해시 함수를 어떻게 제공할 수 있습니까?

C 비순차 컨테이너의 사용자 정의 유형에 대한 기본 해시 함수를 어떻게 제공할 수 있습니까?

Linda Hamilton
풀어 주다: 2024-11-30 20:04:13
원래의
882명이 탐색했습니다.

How Can I Provide a Default Hash Function for Custom Types in C   Unordered Containers?

정렬되지 않은 컨테이너의 사용자 정의 유형에 대한 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿