用于返回包装类型的哈希的包装器哈希函数



我有以下代码:

#include <bits/stdc++.h>
using namespace std;
// wrapper class on type E
template <typename E>
class g {
public:
E val;
g(E x) : val(x) {};
};
// hash for g<E> should be hash for E
template<typename E> struct std::hash<g<E>> { 
std::size_t operator()(const ::g<E> &t) const { 
return std::hash<E>()(t); 
} 
};
int main() {
ios_base::sync_with_stdio(false); cin.tie(nullptr);
unordered_set<g<int>>{g<int>(3)};
}

基本上,我的想法是,我有一个围绕模板化类型的包装器,并且我希望能够在unordered_set/map中使用这个包装器类。但我得到以下错误:CCD_ 1。这很奇怪——c++不是实现了这个散列吗?我做错了什么?

您的代码正试图在类型为g<int>t上调用std::hash<int>()。你需要";打开";包装器,并在所附的int:上调用CCD_

return std::hash<E>()(t.val);

最新更新