• Class / Function / Type

      std::
    • Header file

      <>
    • Other / All

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

    履歴 編集

    <unordered_set>

    std::unordered_multiset::推論補助

    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_multiset(InputIterator, InputIterator, see below::size_type = see below,
                         Hash = Hash(), Pred = Pred(), Allocator = Allocator())
        -> unordered_multiset<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_multiset(initializer_list<T>, typename see below::size_type = see below,
                         Hash = Hash(), Pred = Pred(), Allocator = Allocator())
        -> unordered_multiset<T, Hash, Pred, Allocator>; // (2)
    
      template <class InputIterator,  class Allocator>
      unordered_multiset(InputIterator, InputIterator, typename see below::size_type, Allocator)
        -> unordered_multiset<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_multiset(InputIterator, InputIterator, typename see below::size_type,
                         Hash, Allocator)
        -> unordered_multiset<
                 typename iterator_traits<InputIterator>::value_type,
                 Hash,
                 equal_to<typename iterator_traits<InputIterator>::value_type>,
                 Allocator>;                             // (4)
    
      template <class T, class Allocator>
      unordered_multiset(initializer_list<T>, typename see below::size_type, Allocator)
        -> unordered_multiset<T, hash<T>,
                              equal_to<T>, Allocator>;   // (5)
    
      template <class T, class Hash, class Allocator>
      unordered_multiset(initializer_list<T>, typename see below::size_type, Hash, Allocator)
        -> unordered_multiset<T, Hash,
                              equal_to<T>, Allocator>;   // (6)
    
      template <ranges::input_range R,
               class Hash = hash<ranges::range_value_t<R>>,
               class Pred = equal_to<ranges::range_value_t<R>>,
               class Allocator = allocator<ranges::range_value_t<R>>>
      unordered_multiset(from_range_t, R&&, typename see below::size_type = see below,
                         Hash = Hash(), Pred = Pred(), Allocator = Allocator())
        -> unordered_multiset<ranges::range_value_t<R>, Hash, Pred, Allocator>; // (7) C++23から
    
      template <ranges::input_range R, class Allocator>
      unordered_multiset(from_range_t, R&&, typename see below::size_type, Allocator)
        -> unordered_multiset<ranges::range_value_t<R>, hash<ranges::range_value_t<R>>,
                              equal_to<ranges::range_value_t<R>>, Allocator>;   // (8) C++23から
    
      template <ranges::input_range R, class Allocator>
      unordered_multiset(from_range_t, R&&, Allocator)
        -> unordered_multiset<ranges::range_value_t<R>, hash<ranges::range_value_t<R>>,
                              equal_to<ranges::range_value_t<R>>, Allocator>;   // (9) C++23から
    
      template <ranges::input_range R, class Hash, class Allocator>
      unordered_multiset(from_range_t, R&&, typename see below::size_type, Hash, Allocator)
        -> unordered_multiset<ranges::range_value_t<R>, Hash,
                              equal_to<ranges::range_value_t<R>>, Allocator>;   // (10) C++23から
    }
    

    概要

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

    • (1) : イテレータ範囲からの推論
    • (2) : 初期化子リストからの推論
    • (3) : イテレータ範囲とアロケータからの推論
    • (4) : イテレータ範囲、ハッシュ関数、アロケータからの推論
    • (5) : 初期化子リストとアロケータからの推論
    • (6) : 初期化子リスト、ハッシュ関数、アロケータからの推論
    • (7) : Rangeからの推論
    • (8) : Rangeとアロケータからの推論
    • (9) : Rangeとハッシュ関数からの推論
    • (10) : Range、ハッシュ関数、アロケータからの推論

    備考

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

    #include <unordered_set>
    #include <type_traits>
    #include <cassert>
    
    int main()
    {
      // (2)
      // 初期化子リストから推論
      std::unordered_multiset ums1 = {1, 2, 3};
      static_assert(std::is_same_v<decltype(ums1), std::unordered_multiset<int>>);
    
      // パラメータ設定済みのsetからの推論
      std::unordered_multiset ums2 = ums1;
      static_assert(std::is_same_v<decltype(ums2), std::unordered_multiset<int>>);
    
      // (1)
      // イテレータ範囲からの推論。
      // ums3{ums1.begin(), ums1.end()} とすると、イテレータの初期化子リストと見なされてしまうので注意
      std::unordered_multiset ums3(ums1.begin(), ums1.end());
      static_assert(std::is_same_v<decltype(ums3), std::unordered_multiset<int>>);
      assert(ums3.size() == 3);
    }
    

    出力

    バージョン

    言語

    • C++17

    処理系

    関連項目

    参照