키 쌍으로 인한 정렬되지 않은 맵 컴파일 오류
키가 쌍인 정렬되지 않은 맵을 생성하려고 하면 다음 오류가 발생할 수 있습니다. :
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!