unordered_map没有匹配的调用错误

时间:2015-08-31 18:47:08

标签: 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;
}

1 个答案:

答案 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以了解如何正确编写更好的哈希值。