在可以忽略性能的情况下,某些标准库容器对于大多数类型仍然需要自定义哈希类。假设我在某处定义了类型SomeType
,我想使用std::unordered_set
,并且我不在乎性能。我必须写的最低要求是这样的:
template<typename T>
struct Hash42 {
size_t operator()(T const& e) {return 42;}
};
std::unordered_set<SomeType, Hash42<SomeType>> s;
是否有较短的版本?是否在某处定义了通用哈希类?
您可以使运算符本身成为模板而不是类,从而允许推导type参数:
struct Hash0 {
std::size_t operator()(auto const& e) {return 0;}
};
std::unordered_set<SomeType, Hash0> s;
当然,只有当他们的目标是使程序变慢时,才应使用此方法。