std::hash<std::basic_string>
Определено в заголовочном файле <string> | ||
|---|---|---|
template< class A > struct hash<std::basic_string<char, std::char_traits<char>, A>>; | (1) | (начиная с C++11) |
template< class A > struct hash<std::basic_string<char16_t, std::char_traits<char16_t>, A>>; | (2) | (начиная с C++11) |
template< class A > struct hash<std::basic_string<char32_t, std::char_traits<char32_t>, A>>; | (3) | (начиная с C++11) |
template< class A > struct hash<std::basic_string<wchar_t, std::char_traits<wchar_t>, A>>; | (4) | (начиная с C++11) |
template< class A > struct hash<std::basic_string<char8_t, std::char_traits<char8_t>, A>>; | (5) | (начиная с C++20) |
Шаблонные специализации std::hash для различных классов строк позволяют пользователям получать хеши строк.
| Эти хеши совпадают с хешами соответствующих классов | (начиная с C++17) |
Пример
Следующий код демонстрирует один из возможных результатов применения хеш-функции к строке:
#include <functional>
#include <iostream>
#include <memory_resource>
#include <string>
#include <string_view>
using namespace std::literals;
int main()
{
auto sv = "Stand back! I've got jimmies!"sv;
std::string s(sv);
std::pmr::string pmrs(sv); // use default allocator
std::cout << std::hash<std::string_view>{}(sv) << '\n';
std::cout << std::hash<std::string>{}(s) << '\n';
std::cout << std::hash<std::pmr::string>{}(pmrs) << '\n';
}
Возможный результат:
3544599705012401047 3544599705012401047 3544599705012401047
Отчёты об ошибках
Следующие отчёты об ошибках, изменяющих поведение, были ретроактивно применены к ранее опубликованным стандартам C++.
| DR | Применяется к | Опубликованное поведение | Корректное поведение |
|---|---|---|---|
| LWG 3705 | C++11 | Поддержка хеширования для std::basic_string с пользовательскими распределителями не была включена | включена |
См. также
|
(C++11) | функциональный объект хеширования (шаблон класса) |
|
(C++17)(C++17)(C++20)(C++17)(C++17) | поддержка хеширования для string view (специализация шаблона класса) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/string/basic_string/hash