Difference between revisions of "cpp/string/basic string/hash"
From cppreference.com
< cpp | string | basic string
m (→Example: shorten and use the result from libstdc++) |
(extended example to show equivalence or all string classes and linked cpp/string/basic_string_view/hash) |
||
Line 33: | Line 33: | ||
#include <iostream> | #include <iostream> | ||
#include <string> | #include <string> | ||
+ | #include <string_view> | ||
#include <functional> | #include <functional> | ||
+ | #include <memory_resource> | ||
+ | using namespace std::literals; | ||
int main() | 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::string>{}(s) << '\n'; | ||
+ | std::cout << std::hash<std::pmr::string>{}(pmrs) << '\n'; | ||
} | } | ||
| p=true | | p=true | ||
| output= | | output= | ||
+ | 3544599705012401047 | ||
+ | 3544599705012401047 | ||
3544599705012401047 | 3544599705012401047 | ||
}} | }} | ||
Line 50: | Line 59: | ||
{{dsc begin}} | {{dsc begin}} | ||
{{dsc inc | cpp/utility/dsc hash}} | {{dsc inc | cpp/utility/dsc hash}} | ||
+ | {{dsc end}} | ||
+ | {{dsc begin}} | ||
+ | {{dsc inc | cpp/string/basic_string_view/dsc hash}} | ||
{{dsc end}} | {{dsc end}} | ||
{{langlinks|de|es|fr|it|ja|pt|ru|zh}} | {{langlinks|de|es|fr|it|ja|pt|ru|zh}} |
Revision as of 06:32, 9 July 2020
Defined in header <string>
|
||
template<> struct hash<std::string>; template<> struct hash<std::wstring>; |
(since C++11) | |
template<> struct hash<std::pmr::string>; template<> struct hash<std::pmr::wstring>; |
(since C++20) | |
The template specializations of std::hash for the various string classes allow users to obtain hashes of strings.
These hashes equal the hashes of corresponding std::basic_string_view 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 <iostream> #include <string> #include <string_view> #include <functional> #include <memory_resource> 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'; }
Possible output:
3544599705012401047 3544599705012401047 3544599705012401047
See also
(C++11) |
hash function object (class template) |
hash support for string views (class template specialization) |