|
|
|
Defined in header <string> | ||
template<class A> struct hash<std::basic_string<char,std::char_traits<char>, A>>; | (1) | (since C++11) |
template<class A> struct hash<std::basic_string<char16_t,std::char_traits<char16_t>, A>>; | (2) | (since C++11) |
template<class A> struct hash<std::basic_string<char32_t,std::char_traits<char32_t>, A>>; | (3) | (since C++11) |
template<class A> struct hash<std::basic_string<wchar_t,std::char_traits<wchar_t>, A>>; | (4) | (since C++11) |
template<class A> struct hash<std::basic_string<char8_t,std::char_traits<char8_t>, A>>; | (5) | (since C++20) |
The template specializations ofstd::hash for the various string classes allow users to obtain hashes of strings.
These hashes equal the hashes of correspondingstd::basic_string_view classes: If | (since C++17) |
The following code shows one possible output of a hash function used on a string:
#include <functional>#include <iostream>#include <memory_resource>#include <string>#include <string_view>usingnamespace 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';}
Possible output:
354459970501240104735445997050124010473544599705012401047
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
DR | Applied to | Behavior as published | Correct behavior |
---|---|---|---|
LWG 3705 | C++11 | hash support forstd::basic_string with customized allocators was not enabled | enabled |
(C++11) | hash function object (class template)[edit] |
hash support for string views (class template specialization)[edit] |