我可以覆盖std :: hash吗?

时间:2013-08-06 11:29:11

标签: c++ c++11 hashtable stdhash

我可以用C ++ 11中我自己的std::hash定义替换std::hash的实际实现吗?

我的意思是来自我的代码库,没有触及标准库。

在这种情况下我看不到虚函数/多态的任何用法,所以我想我无法改变std :: hash的定义吗?

2 个答案:

答案 0 :(得分:7)

您可以为特定类型专门化哈希。 请参阅herehere,例如像这样

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>
    {
        // ...
    };
}