插入unordered_map <pair <int,int>,int&gt;抛出编译错误

时间:2016-02-03 05:45:21

标签: c++ c++11 compiler-errors unordered-map

以下代码是否存在语义错误?:

#include<iostream>
#include<unordered_map>
using namespace std;

int main()
{
  unordered_map<pair<int,int>, int> M;  // <--- many compiler errors here
  pair<int,int> p = make_pair(5,4);

  M[p] = 3;
}

我遇到了一堆编译器错误,但对我而言似乎应该可以正常工作(如果我只使用int作为unordered_map的键)。任何想法为什么会这样?

1 个答案:

答案 0 :(得分:1)

您在line后面遇到很多编译器错误:

unordered_map<pair<int,int>, int> M;

这是因为您将pair<int, int>定义为unordered_map&amp;的关键字。 hash 没有隐含的pair<int, int> (虽然存在operator==)。
即使您将一些虚拟class X作为其密钥,如果它没有hash&amp; /或operator==,也会出现此类错误。

通常,在声明unordered_map键时,以下功能应该可以通过&#34;键&#34;

进行访问。
template <class Key,
          class T,
          class Hash = hash<Key>,  // implement if missing
          class Pred = equal_to<Key>,  // implement if missing
          class Alloc = allocator<pair<const Key,T>>
          >
class unordered_map;

如果是int,则默认为hash&amp; operator==暗示;因此没有错误。