std::hash
|
|
Эта страница была переведена автоматически с английской версии вики используя Переводчик Google.
Перевод может содержать ошибки и странные формулировки. Наведите курсор на текст, чтобы увидеть оригинал. Вы можете помочь в исправлении ошибок и улучшении перевода. Для инструкций перейдите по ссылке. Щёлкните здесь, чтобы увидеть английскую версию этой страницы |
| Определено в заголовочном файле <functional>
|
||
| template< class Key > struct hash; // not defined |
(начиная с C++11) | |
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Key.Key.Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
k1 и k2, которые являются равными, std::hash<Key>()(k1) == std::hash<Key>()(k2).k1 and k2 that are equal, std::hash<Key>()(k1) == std::hash<Key>()(k2).Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
k1 и k2, что не равны, вероятность того, что std::hash<Key>()(k1) == std::hash<Key>()(k2) должна быть очень мала, приближаясь 1.0/std::numeric_limits<size_t>::max().k1 and k2 that are not equal, the probability that std::hash<Key>()(k1) == std::hash<Key>()(k2) should be very small, approaching 1.0/std::numeric_limits<size_t>::max().Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
CopyConstructible и Destructible.CopyConstructible and Destructible.Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Содержание |
[править] Типы-члены
argument_type
|
Key
|
result_type
|
std::size_t |
[править] Функции-члены
| создает хэш-функции объекта Оригинал: constructs a hash function object Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. (public функция-член) | |
| вычисления хэш аргумента Оригинал: calculate the hash of the argument Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. (public функция-член) |
[править] Стандартный специализации для основных типов
| Определено в заголовочном файле <functional>
|
||
| template<> struct hash<bool>; template<> struct hash<char>; |
||
[править] Стандартный специализации для библиотеки типов
| (C++11) (C++11) (C++11) (C++11) |
хеширование строк (специализация шаблона класса) |
| (C++11) |
хэш поддержку std::error_code Оригинал: hash support for std::error_code Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. (специализация шаблона класса) |
| (C++11) |
хэш поддержку std::bitset Оригинал: hash support for std::bitset Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. (специализация шаблона класса) |
| (C++11) |
хэш поддержку std::unique_ptr Оригинал: hash support for std::unique_ptr Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. (специализация шаблона класса) |
| (C++11) |
хэш поддержку std::shared_ptr Оригинал: hash support for std::shared_ptr Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. (специализация шаблона класса) |
| (C++11) |
хэш поддержку std::type_index Оригинал: hash support for std::type_index Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. (специализация шаблона класса) |
| (C++11) |
хэш поддержку std::vector<bool> Оригинал: hash support for std::vector<bool> Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. (специализация шаблона класса) |
| (C++11) |
хэш поддержку std::thread::id Оригинал: hash support for std::thread::id Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. (специализация шаблона класса) |
[править] Примеры
Демонстрирует вычисления хэш для std::string, типа, который уже имеет хэш специализация .
Demonstrates the computation of a hash for std::string, a type that already has a hash specialization.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
#include <iostream> #include <functional> #include <string> int main() { std::string str = "Meet the new boss..."; std::hash<std::string> hash_fn; size_t str_hash = hash_fn(str); std::cout << str_hash << '\n'; }
Вывод:
391070135
Демонстрирует создание хэш-функции для определенного пользователем типа. Используя это в качестве параметра шаблона для std::unordered_map, std::unordered_set и т.д., также требует специализации std::equal_to .
Demonstrates creation of a hash function for a user defined type. Using this as a template parameter for std::unordered_map, std::unordered_set, etc. also requires specialization of std::equal_to.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
#include <iostream> #include <functional> #include <string> struct S { std::string first_name; std::string last_name; }; template<class T> class MyHash; template<> class MyHash<S> { public: size_t operator()(const S &s) const { size_t h1 = std::hash<std::string>()(s.first_name); size_t h2 = std::hash<std::string>()(s.last_name); return h1 ^ (h2 << 1); } }; int main() { std::string s1 = "Hubert"; std::string s2 = "Farnsworth"; std::hash<std::string> h1; S n1; n1.first_name = s1; n1.last_name = s2; std::cout << "hash(s1) = " << h1(s1) << "\n" << "hash(s2) = " << std::hash<std::string>()(s2) << "\n" << "hash(n1) = " << MyHash<S>()(n1) << "\n"; }
Вывод:
hash(s1) = 6119893563398376542 hash(s2) = 14988020022735710972 hash(n1) = 17649170831080298918
Демонстрирует специализируются std::hash для пользователей определенного типа .
Demonstrates how to specialize std::hash for a user defined type.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
#include <iostream> #include <functional> #include <string> struct S { std::string first_name; std::string last_name; }; namespace std { template<> class hash<S> { public: size_t operator()(const S &s) const { size_t h1 = std::hash<std::string>()(s.first_name); size_t h2 = std::hash<std::string>()(s.last_name); return h1 ^ ( h2 << 1 ); } }; } int main() { S s; s.first_name = "Bender"; s.last_name = "Rodriguez"; std::hash<S> hash_fn; std::cout << "hash(s) = " << hash_fn(s) << "\n"; }
Вывод:
hash(s) = 32902390710

