table of contents
        
      
      
    - Tumbleweed 2024.07.05-1.3
 - Leap-16.0
 - Leap-15.6
 
| std::filesystem::hash_value(3) | C++ Standard Libary | std::filesystem::hash_value(3) | 
NAME¶
std::filesystem::hash_value - std::filesystem::hash_value
Synopsis¶
 Defined in header <filesystem>
  
   std::size_t hash_value( const std::filesystem::path& p ) noexcept;
    (since C++17)
Parameters¶
p - a std::filesystem::path object
Return value¶
 A hash value such that if for two paths, p1 == p2 then
    hash_value(p1) ==
  
   hash_value(p2).
  
   The return value is consistent with std::hash.
Notes¶
 Equality of two paths is determined by comparing each component
    separately, so, for
  
   example "a//b" equals "a/b" and has the same
  hash_value.
  
   hash_value originates from the Boost.filesystem library where it was used for
  
   interoperability with boost.hash (which calls hash_value found by
    argument-dependent
  
   lookup or boost::hash_value where available).
Example¶
// Run this code
  
   #include <cassert>
  
   #include <cstddef>
  
   #include <filesystem>
  
   #include <iomanip>
  
   #include <iostream>
  
   #include <unordered_set>
  
   namespace fs = std::filesystem;
  
   void show_hash(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));
  
   show_hash(tmp1);
  
   show_hash(tmp2);
  
   for (auto s : {"/a///b", "/a//b", "/a/c",
    "...", "..", ".", ""})
  
   show_hash(s);
  
   // A hash function object to work with unordered_* containers:
  
   struct PathHash
  
   {
  
   std::size_t operator()(fs::path const& p) const noexcept
  
   {
  
   return fs::hash_value(p);
  
   }
  
   };
  
   std::unordered_set<fs::path, PathHash> dirs{
  
   "/bin", "/bin", "/lib", "/lib",
    "/opt", "/opt", "/tmp",
    "/tmp/../tmp"};
  
   for (fs::path const& p : dirs)
  
   std::cout << p << ' ';
  
   std::cout << '\n';
  
   }
Possible output:¶
 6050C47ADB62DFE5 : "/tmp"
  
   62795A58B69AD90A : "/tmp/../tmp"
  
   FF302110C9991974 : "/a///b"
  
   FF302110C9991974 : "/a//b"
  
   FD6167277915D464 : "/a/c"
  
   C42040F82CD8B542 : "..."
  
   D2D30154E0B78BBC : ".."
  
   D18C722215ED0530 : "."
  
   0 : ""
  
   "/tmp/../tmp" "/opt" "/lib" "/tmp"
    "/bin"
See also¶
 compares the lexical representations of two paths
  
   compare lexicographically
  
   (public member function)
  
   operator==
  
   operator!=
  
   operator<
  
   operator<=
  
   operator>
  
   operator>=
  
   operator<=> lexicographically compares two paths
  
   (C++17) (function)
  
   (C++17)(until C++20)
  
   (C++17)(until C++20)
  
   (C++17)(until C++20)
  
   (C++17)(until C++20)
  
   (C++17)(until C++20)
  
   (C++20)
  
   equivalent checks whether two paths refer to the same file
  
   (C++17) system object
  
   (function)
  
   hash hash function object
  
   (C++11) (class template)
  
   std::hash<std::filesystem::path> hash support for std::filesystem::path
  
   (C++17) (class template specialization)
| 2024.06.10 | http://cppreference.com |