我的台词:
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/