【发布时间】:2019-03-11 04:26:51
【问题描述】:
简单代码:
#include <unordered_map>
int main()
{
std::unordered_map<const int, int> m;
std::unordered_map<const int, int> m1 = m;
}
产生复杂的编译错误信息:
错误 C2280 'std::hash<_kty>::hash(void)': 试图引用一个 删除功能
基本上说 unordered_map 在其内部并不期望密钥是恒定的
附言: 我已经阅读了answer 的类似问题:
关联容器仅将 (key,value) 对公开为 std::pair,所以附加的 const 键类型是多余的。
但它没有解释为什么带有 const 键的 hashmap 实际上无法使用以及如何规避这个问题
【问题讨论】:
-
无关:
unsorted_map中的键无论如何都是const。想一想,如果任何 shmuck 可以随时更改密钥,那么保持正确的顺序是多么令人讨厌。