我的专栏:
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;
}
答案 0 :(得分:6)
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
以了解如何正确编写更好的哈希值。