순서가 지정되지 않은 맵에서 쌍을 키로 사용할 수 있나요?
C에서 쌍으로 unordered_map을 사용할 때 컴파일 오류가 발생할 수 있습니다. 그 열쇠. 문제는 적절한 해시 함수를 제공하지 않고 사용자 정의 유형을 키로 활용하는 데서 발생합니다.
오류 이해
발생하는 오류는 unordered_map이 해싱 메커니즘을 사용하여 키-값 쌍을 효율적으로 찾습니다. 그러나 쌍과 같은 복합 유형에 대한 기본 해시 함수가 부족합니다. 오류 메시지는 컴파일러가 쌍 키 유형에 대해 정의되지 않은 해시 함수를 암시적으로 인스턴스화할 수 없음을 나타냅니다.
해결책: 해시 함수 제공
이 문제를 해결하려면 투표 쌍 유형에 대한 고유한 해시 값을 계산하는 해시 함수를 정의해야 합니다. 이 함수는 한 쌍을 인수로 받아들이고 해시 값을 출력해야 합니다.
다음은 해시 함수 구현의 예입니다.
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; } };
이 해시 함수를 사용하면 코드를 수정하여 쌍을 키로 사용하는 unordered_map:
using Vote = std::pair<std::string, std::string>; using Unordered_map = std::unordered_map<Vote, int, pair_hash>;
이제 이 unordered_map을 의도한 대로 사용할 수 있습니다. 컴파일 오류입니다.
위 내용은 C 비순차 맵에서 쌍을 키로 사용할 수 있으며 어떻게 사용할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!