> 백엔드 개발 > C++ > 순서가 지정되지 않은 맵에서 쌍을 키로 사용하는 방법은 무엇입니까?

순서가 지정되지 않은 맵에서 쌍을 키로 사용하는 방법은 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-12-11 06:55:09
원래의
240명이 탐색했습니다.

How to Use Pairs as Keys in Unordered Maps?

순서가 지정되지 않은 맵의 키로 쌍 이해

쌍을 키로 사용하여 순서가 지정되지 않은 맵을 생성하려고 하면 사용자가 컴파일 오류를 겪을 수 있습니다. 오류. 이 오류는 사용자 정의 키 유형인 pair에 적합한 해시 함수가 없기 때문에 발생합니다.

이 문제를 해결하려면 std::unordered_map에서 사용자가 키 유형에 맞게 특별히 설계된 해시 함수를 제공해야 합니다. 이 함수는 빠르고 효율적인 검색에 중요한 고유 식별자에 키를 매핑하는 역할을 합니다.

사용자 정의 해시 함수 구현

간단하지만 간단하지는 않습니다. std::hash 가능 유형 쌍에 대한 최적의 해시 함수는 다음과 같이 구현될 수 있습니다. 다음은 다음과 같습니다.

struct pair_hash {
    template <class T1, class T2>
    std::size_t operator()(const std::pair<T1, T2>& p) const {
        auto h1 = std::hash<T1>()(p.first);
        auto h2 = std::hash<T2>()(p.second);
        return h1 ^ h2; // Combine the hashes using a simple XOR
    }
};
로그인 후 복사

사용자 정의 해시 함수 사용

해시 함수가 정의되면 std::unordered_map과 함께 사용하여 컴파일 오류를 해결할 수 있습니다.

#include <unordered_map>
#include <functional>
#include <string>
#include <utility>

using Vote = std::pair<std::string, std::string>;
using Unordered_map = std::unordered_map<Vote, int, pair_hash>;

int main() {
    Unordered_map um;
}
로그인 후 복사

대안 솔루션

더 폭넓은 지원과 더 나은 성능을 위해서는 Boost와 같은 라이브러리 활용을 고려해 보세요. Boost는 다음을 제공합니다:

  • boost::hash_combine: 해시 결합을 위한 더욱 강력한 방법
  • set_hash_value 함수: std::pair와 같은 표준 유형에 대한 해시 함수를 준비합니다

이러한 옵션을 활용하면 사용자는 사용자 정의 키 유형에 대한 안정적인 해싱을 보장할 수 있습니다. std::unordered_map, 효율적이고 최적의 코드 성능을 제공합니다.

위 내용은 순서가 지정되지 않은 맵에서 쌍을 키로 사용하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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