最終更新日時(UTC):
が更新

履歴 編集

class
<memory>

std::owner_hash(C++26)

namespace std {
  struct owner_hash;
}

概要

owner_hashは、スマートポインタを所有権ベースでハッシュするための関数オブジェクトである。

スマートポインタを、unordered_setunordered_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

処理系

関連項目

参照