namespace std {
struct owner_hash;
}
概要
owner_hashは、スマートポインタを所有権ベースでハッシュするための関数オブジェクトである。
スマートポインタを、unordered_setやunordered_mapのキーにする際、値ベースではなく所有権ベースにハッシュすることを指定するために使用する。
owner_equalと組み合わせて使用する。
メンバ関数
| 名前 | 説明 | 対応バージョン |
|---|---|---|
operator() |
関数呼び出し演算子 | C++26 |
メンバ型
| 名前 | 説明 | 対応バージョン |
|---|---|---|
is_transparent |
operator() が関数テンプレートである事を示すタグ型。実装依存の型であるがあくまでタグ型であり、型そのものには意味はない。 |
C++26 |
例
#include <print>
#include <memory>
#include <unordered_set>
template <class Key>
using shared_ptr_uset = std::unordered_set<
std::shared_ptr<Key>,
std::owner_hash,
std::owner_equal
>;
struct X {
int i;
int j;
};
int main()
{
shared_ptr_uset<int> us;
std::shared_ptr<int> p1(new int(2));
std::shared_ptr<X> px(new X());
// 同じ所有権(px)を持つが、異なるポインタを指すp2とp3
std::shared_ptr<int> p2(px, &(px->i));
std::shared_ptr<int> p3(px, &(px->j));
us.insert(p1);
us.insert(p2);
us.insert(p3); // owner_hashでは、p2とp3が同じリソースを
// 指していると見なされるので、p3は挿入されない
std::println("{}", s.size());
}
出力
2
バージョン
言語
- C++26
処理系
- Clang: 22 ✅
- GCC: 16 ✅
- Visual C++: 2026 Update 2 ❌