Могу ли я переопределить std::hash?

Я могу заменить фактическую реализацию std::hash с моим собственным определением std::hash в С ++ 11?

Я имею в виду из моей кодовой базы, не касаясь стандартной библиотеки.

Я не вижу никакой пользы для виртуальной функции / полиморфизма в этом случае, поэтому я полагаю, что я все равно не могу изменить определение std::hash?

2 ответа

Решение

Да, все в порядке, и вам не нужно каким-либо образом изменять стандартную библиотеку, просто используйте специализацию шаблонов:

namespace std
{
    template<>
    struct hash<YourSpecialType>
    {
        // ...
    };
}

Вы можете специализировать хеш для определенных типов. Смотрите здесь и здесь, например, как это

namespace std {
  template <> struct hash<Foo>
  {
    size_t operator()(const Foo & x) const
    {
      /* your code here, e.g. "return hash<int>()(x.value);" */
    }
  };
}

Если вы думаете, что можете добиться большего успеха, чем разработчики библиотек для существующих версий, вы либо 1. не правы, либо 2. умны

Другие вопросы по тегам