Espacios de nombres
Variantes
Acciones

std::filesystem::hash_value

De cppreference.com
< cpp‎ | filesystem‎ | path
 
 
 
 
Definido en el archivo de encabezado <filesystem>
std::size_t hash_value( const std::filesystem::path& p ) noexcept;
(desde C++17)

Contenido

[editar] Parámetros

p - Un objeto std::filesystem::path.

[editar] Valor de retorno

Un valor de dispersión o valor resumen tal que si para dos rutas de acceso p1 == p2, entonces hash_value(p1) == hash_value(p2).

[editar] Notas

La igualdad de dos rutas de acceso se determina comparando cada componente de manera separada, así que, por ejemplo, "a//b" es igual a "a/b" y tiene el mismo valor de dispersión.

hash_value se origina de la biblioteca Boost.Filesystem, donde se usó para la interoperabilidad con boost.hash (que llama a hash_value encontrado por la búsqueda dependiente de argumentos o boost::hash_value cuando está disponible).

[editar] Ejemplo

#include <cassert>
#include <cstddef>
#include <iomanip>
#include <iostream>
#include <filesystem>
#include <unordered_set>
namespace fs = std::filesystem;
 
void mostrar_valor_de_dispersion(fs::path const& p)
{
    std::cout << std::hex << std::uppercase << std::setw(16)
              << fs::hash_value(p) << " : " << p << '\n';
}
 
int main()
{
    auto tmp1 = fs::path{"/tmp"};
    auto tmp2 = fs::path{"/tmp/../tmp"};
    assert( ! (tmp1 == tmp2) );
    assert( fs::equivalent(tmp1, tmp2) );
    mostrar_valor_de_dispersion( tmp1 );
    mostrar_valor_de_dispersion( tmp2 );
 
    for (auto s : {"/a///b", "/a//b", "/a/c", "...", "..", ".", ""})
        mostrar_valor_de_dispersion(s);
 
    // Un objeto función de dispersión/función resumen para que funcione con
    // punteros a  contenedores no ordenados (unordered_*):
    struct HashDeRuta {
        std::size_t operator()(fs::path const& p) const noexcept {
            return fs::hash_value(p);
        }
    };
    std::unordered_set<fs::path, HashDeRuta> dirs {
        "/bin", "/bin", "/lib", "/lib", "/opt", "/opt", "/tmp", "/tmp/../tmp"
    };
    for (fs::path const& p: dirs) { std::cout << p << ' '; }
}

Posible salida:

6050C47ADB62DFE5 : "/tmp"
62795A58B69AD90A : "/tmp/../tmp"
FF302110C9991974 : "/a///b"
FF302110C9991974 : "/a//b"
FD6167277915D464 : "/a/c"
C42040F82CD8B542 : "..."
D2D30154E0B78BBC : ".."
D18C722215ED0530 : "."
               0 : ""
"/tmp/../tmp" "/opt" "/lib" "/tmp" "/bin"

[editar] Véase también

Compara las representaciones lexicográficas de dos rutas de acceso lexicográficamente.
(función miembro pública) [editar]
(hasta C++20)(hasta C++20)(hasta C++20)(hasta C++20)(hasta C++20)(C++20)
Compara lexicográficamente dos rutas de acceso.
(función) [editar]
Verifica si dos rutas de acceso se refieren al mismo objeto de sistema de archivos.
(función) [editar]
(C++11)
Objeto función de dispersión (hash).
(plantilla de clase) [editar]