>백엔드 개발 >C++ >C 비순차 맵에서 쌍을 키로 사용할 수 있으며 어떻게 사용할 수 있나요?

C 비순차 맵에서 쌍을 키로 사용할 수 있으며 어떻게 사용할 수 있나요?

Linda Hamilton
Linda Hamilton원래의
2024-12-16 14:11:10132검색

Can I Use Pairs as Keys in C   Unordered Maps, and How?

순서가 지정되지 않은 맵에서 쌍을 키로 사용할 수 있나요?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.