- filesystem[meta header]
- std[meta namespace]
- class template[meta id-type]
- cpp23[meta cpp]
namespace std {
template <>
struct hash<std::filesystem::path>;
}- hash[link /reference/functional/hash.md]
std::hashクラスの、std::filesystem::pathに対する特殊化。パスの内容からハッシュ値を計算し、pathをunordered_mapやunordered_setのキーとして使用できるようにする。
この特殊化はC++23で追加された。それ以前は定義されておらず、hash<path>は使用できなかった。
pを型pathのオブジェクトとするとき、hash<path>()(p)はhash_value(p)と同じ値を返す。
したがって、2つのパスp1とp2についてp1 == p2であれば、hash<path>()(p1) == hash<path>()(p2)となる。
#include <cassert>
#include <filesystem>
#include <functional>
namespace fs = std::filesystem;
int main()
{
fs::path p = "a/b/c";
// パスの内容からハッシュ値を計算する
std::size_t h = std::hash<fs::path>{}(p);
// hash_valueと同じ値になる
assert(h == fs::hash_value(p));
}- std::hash[color ff0000]
- fs::hash_value[link hash_value.md]
- C++23
- LWG Issue 3657.
std::hash<std::filesystem::path>is not enabled- C++23で、
std::hashのpathに対する特殊化が定義された
- C++23で、