From cppreference.com
Defined in header
template<classA>structhash<std::basic_string<char,std::char_traits<char>,A>>; (1) (since C++11)template<classA>structhash<std::basic_string<char16_t,std::char_traits<char16_t>,A>>; (2) (since C++11)template<classA>structhash<std::basic_string<char32_t,std::char_traits<char32_t>,A>>; (3) (since C++11)template<classA>structhash<std::basic_string<wchar_t,std::char_traits<wchar_t>,A>>; (4) (since C++11)template<classA>structhash<std::basic_string<char8_t,std::char_traits<char8_t>,A>>; (5) (since C++20)The template specializations of
for the various string classes allow users to obtain hashes of strings.
These hashes equal the hashes of corresponding
classes: If S is one of these string types, SV is the corresponding string view type, and s is an object of type S, then std::hash<S>()(s)==std::hash<SV>()(SV(s)).
(since C++17)Example
The following code shows one possible output of a hash function used on a string:
Run this code
#include<functional>#include<iostream>#include<memory_resource>#include<string>#include<string_view>usingnamespacestd::literals;intmain(){autosv="Stand back! I've got jimmies!"sv;std::strings(sv);std::pmr::stringpmrs(sv);// use default allocatorstd::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:
3544599705012401047 3544599705012401047 3544599705012401047 Defect reports
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
DR Applied to Behavior as published Correct behavior
C++11 hash support for
with customized allocators was not enabled enabled See also