最終更新日時:
が更新

履歴 編集

<unordered_set>

std::unordered_set::推論補助(C++17)

namespace std {
  template <class InputIterator,
            class Hash = hash<typename iterator_traits<InputIterator>::value_type>,
            class Pred = equal_to<typename iterator_traits<InputIterator>::value_type>,
            class Allocator = allocator<typename iterator_traits<InputIterator>::value_type>>
  unordered_set(InputIterator, InputIterator, typename see below::size_type = see below,
                Hash = Hash(), Pred = Pred(), Allocator = Allocator())
    -> unordered_set<typename iterator_traits<InputIterator>::value_type,
                     Hash, Pred, Allocator>;              // (1)

  template <class T, class Hash = hash<T>,
            class Pred = equal_to<T>, class Allocator = allocator<T>>
  unordered_set(initializer_list<T>, typename see below::size_type = see below,
          Hash = Hash(), Pred = Pred(), Allocator = Allocator())
    -> unordered_set<T, Hash, Pred, Allocator>;           // (2)

  template <class InputIterator,  class Allocator>
  unordered_set(InputIterator, InputIterator, typename see below::size_type, Allocator)
    -> unordered_set<typename iterator_traits<InputIterator>::value_type,
                     hash<typename iterator_traits<InputIterator>::value_type>,
                     equal_to<typename iterator_traits<InputIterator>::value_type>,
                     Allocator>;                          // (3)

  template <class InputIterator, class Hash, class Allocator>
  unordered_set(InputIterator, InputIterator, typename see below::size_type,
                Hash, Allocator)
    -> unordered_set<typename iterator_traits<InputIterator>::value_type, Hash,
                     equal_to<typename iterator_traits<InputIterator>::value_type>,
                     Allocator>;                          // (4)

  template <class T, class Allocator>
  unordered_set(initializer_list<T>, typename see below::size_type, Allocator)
    -> unordered_set<T, hash<T>, equal_to<T>, Allocator>; // (5)

  template<class T, class Hash, class Allocator>
  unordered_set(initializer_list<T>, typename see below::size_type, Hash, Allocator)
    -> unordered_set<T, Hash, equal_to<T>, Allocator>;    // (6)
}

概要

std::unordered_setクラステンプレートの型推論補助。

  • (1) : イテレータ範囲からの推論
  • (2) : 初期化子リスト、ハッシュ関数、比較関数オブジェクトからの推論
  • (3) : イテレータ範囲とアロケータからの推論
  • (4) : イテレータ範囲、ハッシュ関数、アロケータからの推論
  • (5) : 初期化子リストとアロケータからの推論

備考

  • メンバ型size_typeは自動的に推論される

#include <unordered_set>
#include <type_traits>
#include <cassert>

int main()
{
  // (2)
  // 初期化子リストから推論
  std::unordered_set us1 = {1, 2, 3};
  static_assert(std::is_same_v<decltype(us1), std::unordered_set<int>>);

  // パラメータ設定済みのsetからの推論
  std::unordered_set us2 = us1;
  static_assert(std::is_same_v<decltype(us2), std::unordered_set<int>>);

  // (1)
  // イテレータ範囲からの推論。
  // us3{us1.begin(), us1.end()} とすると、イテレータの初期化子リストと見なされてしまうので注意
  std::unordered_set us3(us1.begin(), us1.end());
  static_assert(std::is_same_v<decltype(us3), std::unordered_set<int>>);
  assert(us3.size() == 3);
}

出力

バージョン

言語

  • C++17

処理系

関連項目

参照