c++ - unordered_map 没有匹配的调用错误

标签 c++ dictionary

我的台词:

unordered_map < pair<long long,long long>, long long> myMap;

错误:

error: no matching function for call to 'std::unordered_map<std::pair<long long int, long long int>, long long int>::unordered_map()'

重现错误的代码:

#include <math.h>
#include <stdio.h>
#include <vector>
#include <algorithm>
#include <unordered_map>
#include <utility>
using namespace std;

unordered_map < pair<long long,long long>, long long> myMap;

int main() {
    return 0;
}

最佳答案

std::unordered_map 需要哈希仿函数才能做任何事情。默认情况下,哈希仿函数是 std::hash<Key> - 但该标准仅提供整数类型和指针的特化。 std::pair<long long, long long>两者都不是,所以编译器有效地告诉你你不能实例化 unordered_map你想要,因为它的哈希仿函数格式错误。

您需要做的是提供您自己的。例如,这是最糟糕的哈希仿函数:

struct AlwaysZero {
    size_t operator()(pair<long long, long long> const& ) const {
        return 0;
    }
};

unordered_map < pair<long long,long long>, long long, AlwaysZero> myMap;

编译。它也会表现得很糟糕。你可以查看 boost::hash_combine 了解如何正确编写更好的散列。

关于c++ - unordered_map 没有匹配的调用错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32317905/

相关文章:

c++ - 什么是好的稳定的 C++ 树实现?

python - 在 Python 中按每个键具有不同值的键过滤字典列表

c# - C#Dictionary.ContainsKey()始终返回false

c++ - 将 map<>::iterator 作为 map<>::const_iterator &

c++ - 无法在 C++ 中为 char* 分配内存

c++ - 如何将字符串转换为标准 C 文件?

c++ - 如何在 C++ 中解析 tar 文件

c++ - SDL2 无法在屏幕上绘制白色矩形

python - 字典类未初始化

ios - 我可以将自定义 Google map 导入 iOS MapKit 吗?