unordered_map 不提供自定义哈希函数

问题描述 投票:0回答:1

只要您的编译器和标准库支持 C++11 或更高版本,我可以在不提供自定义哈希函数的情况下声明带有类型pair的键的 unordered_map 吗? 就像这样:

#include <iostream>
#include <unordered_map>
#include <utility>

int main() {
    // Declare an unordered_map with pair<int, int> as key and int as value
    std::unordered_map<std::pair<int, int>, int> myMap;

    // Example usage:
    myMap[{1, 2}] = 10;
    myMap[{3, 4}] = 20;

    // Accessing values
    int value1 = myMap[{1, 2}];
    int value2 = myMap[{3, 4}];

    return 0;
}

当我在我的 MacBook 上用 clion 尝试它时,它总是提示如下错误: 错误:static_assert 由于要求“integral_constant::value”而失败“指定的哈希不满足哈希要求” static_assert(__check_hash_requirements<_Key, _Hash>::值,

chatGPT 总是说它可以工作。我很困惑。

c++ unordered-map
1个回答
0
投票

不要使用 ChatGPT,而是使用正确的参考,例如 https://en.cppreference.com/w/cpp/utility/hash。该页面列出了标准库提供的所有专业化,您可以清楚地看到

std::pair
不存在,因此您的代码不可能工作。该页面甚至包含一条注释说

注意:std::pair 和标准的额外专业化 容器类型以及组成哈希的实用函数是 可用在

boost::hash

© www.soinside.com 2019 - 2024. All rights reserved.