какая хеш-функция используется в boost c ++ unordered_map? - PullRequest
2 голосов
/ 15 января 2011

какая хеш-функция используется в boost c ++ unordered_map? Я имел в виду, какие хеш-алгоритмы используются boost :: hash, например

template <> struct hash;

Спасибо

Ответы [ 2 ]

9 голосов
/ 15 января 2011

По умолчанию используется boost :: hash :)

5 голосов
/ 15 января 2011

Это зависит от типа, который вы используете, если вы посмотрите здесь шаблонный класс boost::hash специализирован:

  template<> struct hash<bool>;
  template<> struct hash<char>;
  template<> struct hash<signed char>;
  template<> struct hash<unsigned char>;
  template<> struct hash<wchar_t>;
  template<> struct hash<short>;
  template<> struct hash<unsigned short>;
  template<> struct hash<int>;
  template<> struct hash<unsigned int>;
  template<> struct hash<long>;
  template<> struct hash<unsigned long>;
  template<> struct hash<long long>;
  template<> struct hash<unsigned long long>;
  template<> struct hash<float>;
  template<> struct hash<double>;
  template<> struct hash<long double>;
  template<> struct hash<std::string>;
  template<> struct hash<std::wstring>;
  template<typename T> struct hash<T*>;

Вы также можете указать свой собственный хэш в качестве третьего аргумента шаблона:

namespace boost {
  template<typename Key, typename Mapped, typename Hash = boost::hash<Key>, 
           typename Pred = std::equal_to<Key>, 
           typename Alloc = std::allocator<std::pair<Key const, Mapped> > > 
    class unordered_map;
...