>백엔드 개발 >C++ >`std::unordered_map`에서 `std::pair`를 키로 사용할 수 없는 이유는 무엇이며 어떻게 해결합니까?

`std::unordered_map`에서 `std::pair`를 키로 사용할 수 없는 이유는 무엇이며 어떻게 해결합니까?

Linda Hamilton
Linda Hamilton원래의
2024-12-07 02:57:12854검색

Why Can't I Use `std::pair` as the Key in an `std::unordered_map` and How Do I Fix It?

쌍을 키로 사용하여 unordered_map을 컴파일할 수 없는 이유는 무엇입니까?

여기서 직면한 문제는 적절한 해시 함수가 없다는 것입니다. 키 유형의 경우. 이 문제를 해결하려면 쌍 키에 대한 사용자 지정 해시 함수를 제공하세요. 예는 다음과 같습니다.

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

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;  // Simple example, for better results use boost.hash_combine
    }
};

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

이 사용자 정의 해시 함수를 사용하면 이제 unordered_map 컴파일 오류 없이. 여기에 제공된 해시 함수는 데모 목적으로 단순화되었습니다. 실제 시나리오의 경우 Boost의 Boost.hash_combine과 같은 기술을 사용하여 해시 함수의 품질을 향상시키는 것을 고려해 보십시오.

위 내용은 `std::unordered_map`에서 `std::pair`를 키로 사용할 수 없는 이유는 무엇이며 어떻게 해결합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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