> 백엔드 개발 > C++ > 쌍 키를 사용하여 순서가 지정되지 않은 지도 컴파일 오류를 해결하는 방법은 무엇입니까?

쌍 키를 사용하여 순서가 지정되지 않은 지도 컴파일 오류를 해결하는 방법은 무엇입니까?

DDD
풀어 주다: 2024-12-16 06:41:25
원래의
332명이 탐색했습니다.

How to Resolve Unordered Map Compilation Errors with Pair Keys?

키 쌍으로 인한 정렬되지 않은 맵 컴파일 오류

키가 쌍인 정렬되지 않은 맵을 생성하려고 하면 다음 오류가 발생할 수 있습니다. :

Implicit instantiation of undefined template 'std::__1::hash, std::__1::basic_string >>'
로그인 후 복사

이 오류는 순서가 지정되지 않은 맵에 대해 해시 함수를 정의해야 하기 때문에 발생합니다. 주요 유형. hash 기본적으로 사용 가능하며 쌍에는 해시 함수가 제공되지 않습니다.

해결책: 사용자 정의 해시 함수 제공

이 문제를 해결하려면 쌍 키 유형에 대한 사용자 정의 해시 함수를 정의해야 합니다. 구현 예는 다음과 같습니다.

struct pair_hash {
    template<class T1, class T2>
    size_t operator()(const pair<T1, T2>& p) const {
        auto h1 = hash<T1>()(p.first);
        auto h2 = hash<T2>()(p.second);
        return h1 ^ h2;
    }
};
로그인 후 복사

이 해시 함수는 비트 XOR(^)을 사용하여 쌍의 개별 구성 요소의 해시 값을 결합합니다.

사용자 정의 해시 함수 사용

해시 함수를 정의한 후에는 이를 사용하여 쌍으로 정렬되지 않은 지도를 만들 수 있습니다.

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

Unordered_map um;
로그인 후 복사

이번 수정으로 더 이상 컴파일 오류가 발생하지 않으며 순서가 지정되지 않은 맵을 예상대로 사용할 수 있습니다.

위 내용은 쌍 키를 사용하여 순서가 지정되지 않은 지도 컴파일 오류를 해결하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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