包装器哈希函数到包装类型的 return 哈希
Wrapper hash function to return hash of wrapped type
我有以下代码:
#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 中使用这个包装器 class。但我收到以下错误:
no match for call to '(std::hash<int>) (const g<int>&)'
。这很奇怪——C++ 没有实现这个散列吗?我做错了什么?
您的代码正在尝试在类型为 g<int>
的 t
上调用 std::hash<int>()
。您需要“打开”包装器并在随附的 int
:
上调用 std::hash<int>()
return std::hash<E>()(t.val);
我有以下代码:
#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 中使用这个包装器 class。但我收到以下错误:
no match for call to '(std::hash<int>) (const g<int>&)'
。这很奇怪——C++ 没有实现这个散列吗?我做错了什么?
您的代码正在尝试在类型为 g<int>
的 t
上调用 std::hash<int>()
。您需要“打开”包装器并在随附的 int
:
std::hash<int>()
return std::hash<E>()(t.val);