我可以用C ++ 11中我自己的std::hash
定义替换std::hash
的实际实现吗?
我的意思是来自我的代码库,没有触及标准库。
在这种情况下我看不到虚函数/多态的任何用法,所以我想我无法改变std :: hash的定义吗?
答案 0 :(得分:7)
您可以为特定类型专门化哈希。 请参阅here和here,例如像这样
namespace std {
template <> struct hash<Foo>
{
size_t operator()(const Foo & x) const
{
/* your code here, e.g. "return hash<int>()(x.value);" */
}
};
}
如果您认为您可以比现有版本的库实现者做得更好,那么您也可以 错了 要么 聪明的
答案 1 :(得分:4)
是的没关系,您不必以任何方式修改标准库,只需使用模板专业化:
namespace std
{
template<>
struct hash<YourSpecialType>
{
// ...
};
}