Espacios de nombres
Variantes

std::hash (std::string, std::wstring, std::u16string, std::u32string, std::pmr::string, std::pmr::wstring, std::pmr::u16string, std::pmr::u32string)

De cppreference.com
 
 
 
std::basic_string
 
<tbody> </tbody>
Definido en el archivo de encabezado <string>
template<> struct hash<std::string>; template<> struct hash<std::wstring>; template<> struct hash<std::u8string>; // c++20 template<> struct hash<std::u16string>; template<> struct hash<std::u32string>;
(desde C++11)
template<> struct hash<std::pmr::string>; template<> struct hash<std::pmr::wstring>; template<> struct hash<std::pmr::u8string>; template<> struct hash<std::pmr::u16string>; template<> struct hash<std::pmr::u32string>;
(desde C++20)

Las especializaciones de plantilla de std::hash para las varias clases de cadenas permiten que los usuarios obtengan los hashes (resúmenes) de las cadenas.

Estos hashes son iguales que los hashes de las clases std::basic_string_view correspondientes: Si S es uno de estos tipos de cadena, SV es el tipo de la vista sobre cadena correspondiente, y si s es un objeto de tipo S, entonces std::hash<S>()(s) == std::hash<SV>()(SV(s)).

(desde C++17)

Ejemplo

El siguiente código muestra una posible salida de una función hash utilizada en una cadena:

#include <iostream>
#include <string>
#include <string_view>
#include <functional>
#include <memory_resource>
using namespace std::literals;
 
int main()
{
    auto sv = "Al valiente mis ataques!"sv;
    std::string s(sv);
    std::pmr::string pmrs(sv); // usar asignador de memoria por defecto
 
    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';
}

Posible salida:

3544599705012401047
3544599705012401047
3544599705012401047

Véase también

(C++11)
Objeto función de dispersión (hash).
(plantilla de clase) [editar]
Apoyo de generación de dispersión para vistas sobre cadena
(especialización de plantilla de clase) [editar]