Compilation error related to map and unordered_map: “attempting to reference a deleted function”
我想在C ++ STL中使用map来创建vector和int之间的关联。 但是我得到了多个编译错误,代码如下:
1 2 3 4 5 6 7 8 9 10 11 | #include <vector> #include <map> #include <unordered_map> using namespace std; int main(void) { unordered_map<vector<char>, int> mp; return 0; } |
并在VC ++中得到此编译错误:
错误C2280:'std :: hash <_Kty> :: hash(const std :: hash <_Kty>&)':尝试引用已删除的函数
但是,如果我改变我的代码,如下所示,那么代码可以正确编译:
1 2 3 4 5 6 7 8 9 10 11 | #include <vector> #include <map> #include <unordered_map> using namespace std; int main(void) { map<vector<char>, int> mp; return 0; } |
我在StackoverFlow中发现了这个问题,其标题是:
使用自定义类类型作为键的C ++ unordered_map。
但我想知道为什么使用map <>可以通过编译检查但无法使用unordered_map <>?
继@ JohnZwinck的(优秀)答案之后,我会说使用
John提供的链接对此进行了扩展,但实际上,每次需要对任何内容进行哈希处理时,哈希函数都必须检查向量中的每个元素。如果矢量很大,那么,哎哟!
所以