我的专栏:
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)
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以了解如何正确编写更好的哈希值.