unordered_map没有匹配的调用错误

Sea*_*ill 4 c++ dictionary

我的专栏:

unordered_map < pair<long long,long long>, long long> myMap;
Run Code Online (Sandbox Code Playgroud)

而错误:

error: no matching function for call to 'std::unordered_map<std::pair<long long int, long long int>, long long int>::unordered_map()'
Run Code Online (Sandbox Code Playgroud)

重现错误的代码:

#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;
}
Run Code Online (Sandbox Code Playgroud)

Bar*_*rry 7

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;
Run Code Online (Sandbox Code Playgroud)

编译.它也会表现得非常糟糕.您可以查看boost::hash_combine以了解如何正确编写更好的哈希值.