最終更新日時:
が更新

履歴 編集

<set>

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

namespace std {
  template <class InputIterator,
            class Compare = less<typename iterator_traits<InputIterator>::value_type>,
            class Allocator = allocator<typename iterator_traits<InputIterator>::value_type>>
  set(InputIterator, InputIterator,
      Compare = Compare(), Allocator = Allocator())
    -> set<typename iterator_traits<InputIterator>::value_type, Compare, Allocator>; // (1)

  template <class Key, class Compare = less<Key>, class Allocator = allocator<Key>>
  set(initializer_list<Key>, Compare = Compare(), Allocator = Allocator())
    -> set<Key, Compare, Allocator>;                                                 // (2)

  template <class InputIterator, class Allocator>
  set(InputIterator, InputIterator, Allocator)
    -> set<typename iterator_traits<InputIterator>::value_type,
           less<typename iterator_traits<InputIterator>::value_type>, Allocator>;    // (3)

  template <class Key, class Allocator>
  set(initializer_list<Key>, Allocator) -> set<Key, less<Key>, Allocator>;           // (4)
}

概要

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

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

#include <set>
#include <type_traits>
#include <cassert>

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

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

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

出力

バージョン

言語

  • C++17

処理系

関連項目

参照