要准备在 中使用的结构unordered_set
,需要散列函数。这可以通过重载operator size_t()
(ew)或烦人的方式来完成,如下所示:
namespace std
{
template<> struct hash<MyStruct> : public unary_function<MyStruct, size_t>
{
size_t operator()(const MyStruct& mystruct) const
{
return 0; //hash here
}
};
}
有没有办法创建这样的接口:
struct Hashable
{
virtual size_t hash() = 0;
};
并设置std::hash
为适用于它的任何实现?我很确定模板不能那样工作,所以这让我陷入了困境。是否有一个安全的 size_t 成语可以像安全的 bool 成语一样工作,用于转换为 size_t?或者是其他东西?std::hash
当每个结构中的公共接口和成员函数更方便时,为每个结构编写新的特化是愚蠢的。