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

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

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

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

5

Решение

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

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

Другие решения

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

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. умный

7

По вопросам рекламы [email protected]