• Class / Function / Type

      std::
    • Header file

      <>
    • Other / All

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

    履歴 編集

    <map>

    std::multimap::推論補助

    namespace std {
      // 説明用の型
      template <class InputIterator>
      using iter_key_t = remove_const_t<typename iterator_traits<InputIterator>::value_type::first_type>;
      template <class InputIterator>
      using iter_val_t = typename iterator_traits<InputIterator>::value_type::second_type;
      template <class InputIterator>
      using iter_to_alloc_t = pair<add_const_t<typename iterator_traits<InputIterator>::value_type::first_type>,
                                   typename iterator_traits<InputIterator>::value_type::second_type>;
      template <ranges::input_range Range>
      using range_key_t = remove_const_t<typename ranges::range_value_t<Range>::first_type>;
      template <ranges::input_range Range>
      using range_val_t = typename ranges::range_value_t<Range>::second_type;
    
      template <class InputIterator,
                class Compare = less<iter_key_t<InputIterator>>,
                class Allocator = allocator<iter_to_alloc_t<InputIterator>>>
      multimap(InputIterator, InputIterator, Compare = Compare(), Allocator = Allocator())
        -> multimap<iter_key_t<InputIterator>, iter_val_t<InputIterator>, Compare, Allocator>; // (1)
    
      template <class Key,
                class T,
                class Compare = less<Key>,
                class Allocator = allocator<pair<const Key, T>>>
      multimap(initializer_list<pair<Key, T>>, Compare = Compare(), Allocator = Allocator())
        -> multimap<Key, T, Compare, Allocator>;                                               // (2)
    
      template <class InputIterator, class Allocator>
      multimap(InputIterator, InputIterator, Allocator)
        -> multimap<iter_key_t<InputIterator>, iter_val_t<InputIterator>,
                    less<iter_key_t<InputIterator>>, Allocator>;                               // (3)
    
      template <class Key, class T, class Allocator>
      multimap(initializer_list<pair<Key, T>>, Allocator)
        -> multimap<Key, T, less<Key>, Allocator>;                                             // (4)
    
      template <ranges::input_range R, class Allocator>
      multimap(from_range_t, R&&, Allocator)
        -> multimap<range_key_t<R>, range_val_t<R>, less<range_key_t<R>>, Allocator>;          // (5) C++23から
    }
    

    概要

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

    • (1) : イテレータ範囲からの推論
    • (2) : 初期化子リストからの推論
    • (3) : イテレータ範囲とアロケータからの推論
    • (4) : 初期化子リストとアロケータからの推論
    • (5) : Rangeからの推論

    備考

    • C++17時点において、multimapの推論補助は使いにくい。これはイテレータ範囲や組でのキーの型がconst Keyとなっているためだ。この使いにくさは、将来の言語拡張で改良される可能性がある。
      multimap m = {{"foo", 2}, {"bar", 3}, {"baz", 4}}; // コンパイルエラー! 初期化子リストからconst Keyを導出できない
      multimap m2 = initializer_list<pair<char const *, int>>({{"foo", 2}, {"bar", 3}, {"baz", 4}}); // OK
      

    バージョン

    言語

    • C++17

    処理系

    関連項目

    参照