以下代码是否存在语义错误?:
#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
的键)。任何想法为什么会这样?
答案 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==
暗示;因此没有错误。