Error: static_assert failed "This hash only works for enumeration types" for unordered_multimap
Error: static_assert failed "This hash only works for enumeration types" for unordered_multimap
我正在尝试插入
unordered_multimap<pair<int, int>, int>
像这样:
unordered_multimap<pair<int, int>, int> tree;
auto firstPair=make_pair(firstNumber, secondNumber);
tree.insert(make_pair(firstPair, 0));
但是,编译器在编译时继续向我问候以下错误:
error: static_assert failed "This hash only works for enumeration types"
现在,在 Google-fu 和阅读其他关于此错误的问题 ( and ) 之后,只有 unordered_map 相反,我得出的结论是我需要提供我自己的哈希函数。但是,这让我感到困惑,因为我读过的其他问题似乎涉及自定义(用户定义)类 的键,而且我不认为我使用的键类型是 "custom." 如果有人能提供这方面的见解,我将不胜感激!
STL 没有为 std::pair
定义散列函数。因此,如果 std::pair<int, int>
是您创建的类型,您需要做同样的事情。您应该声明自己的 std::hash
.
实现
但是,这不是我推荐的。相反,您可能会发现使用地图的地图更容易:unordered_map<int, unordered_multimap<int, int>>
.
我正在尝试插入
unordered_multimap<pair<int, int>, int>
像这样:
unordered_multimap<pair<int, int>, int> tree;
auto firstPair=make_pair(firstNumber, secondNumber);
tree.insert(make_pair(firstPair, 0));
但是,编译器在编译时继续向我问候以下错误:
error: static_assert failed "This hash only works for enumeration types"
现在,在 Google-fu 和阅读其他关于此错误的问题 (
STL 没有为 std::pair
定义散列函数。因此,如果 std::pair<int, int>
是您创建的类型,您需要做同样的事情。您应该声明自己的 std::hash
.
但是,这不是我推荐的。相反,您可能会发现使用地图的地图更容易:unordered_map<int, unordered_multimap<int, int>>
.