Skip to content

Latest commit

 

History

History
243 lines (189 loc) · 11.4 KB

flat_multimap.md

File metadata and controls

243 lines (189 loc) · 11.4 KB

flat_multimap

  • flat_map[meta header]
  • std[meta namespace]
  • class template[meta id-type]
  • cpp23[meta cpp]
namespace std {
  template <class Key,
            class T,
            class Compare = less<Key>,
            class KeyContainer = vector<Key>,
            class MappedContainer = vector<T>>
  class flat_multimap;
}
  • less[link ../functional/less.md]
  • vector[link /reference/vector/vector.md]

概要

メンバ関数

構築・破棄

名前 説明 対応バージョン
(constructor) コンストラクタ C++23
(destructor) デストラクタ C++23
operator= 代入演算子 C++23

イテレータ

名前 説明 対応バージョン
begin 先頭を指すイテレータを取得する C++23
cbegin 先頭を指す読み取り専用イテレータを取得する C++23
end 末尾の次を指すイテレータを取得する C++23
cend 末尾の次を指す読み取り専用イテレータを取得する C++23
rbegin 末尾を指す逆イテレータを取得する C++23
crbegin 末尾を指す読み取り専用逆イテレータを取得する C++23
rend 先頭の前を指す逆イテレータを取得する C++23
crend 先頭の前を指す読み取り専用逆イテレータを取得する C++23

領域

名前 説明 対応バージョン
empty コンテナが空であるかどうかを調べる C++23
size 要素数を取得する C++23
max_size 格納可能な最大の要素数を取得する C++23

コンテナの変更

名前 説明 対応バージョン
clear 全ての要素を削除する C++23
insert 要素を挿入する C++23
insert_range Rangeを挿入する C++23
emplace 要素を直接構築する C++23
emplace_hint ヒントを使って要素を直接構築する C++23
erase 要素を削除する C++23
swap コンテンツを交換する C++23
extract キーのコンテナ、値のコンテナを取得する C++23
replace キーのコンテナ、値のコンテナを置き換える C++23

要素アクセス

名前 説明 対応バージョン
count 指定したキーにマッチする要素の数を取得する C++23
find 指定したキーで要素を探す C++23
contains 指定したキーの要素が含まれているかを判定する C++23
equal_range 指定したキーにマッチする要素範囲を取得する C++23
lower_bound 与えられた値より小さくない最初の要素へのイテレータを取得する C++23
upper_bound 特定の値よりも大きい最初の要素へのイテレータを取得する C++23

オブザーバー

名前 説明 対応バージョン
key_comp キー比較用の関数オブジェクトを取得する C++23
value_comp 要素比較用の関数オブジェクトを取得する C++23
keys キーのコンテナを取得する C++23
values 値のコンテナを取得する C++23

メンバ型

名前 説明 対応バージョン
key_type キーの型。テンプレートパラメータ Key C++23
mapped_type 値の型。テンプレートパラメータ T C++23
value_type 要素の型。std::pair<key_type, mapped_type> C++23
key_compare キー値の大小関係を判定する二項述語の型。テンプレートパラメータ Compare C++23
value_compare 要素値のキー部分で大小関係を判定する二項述語の型。入れ子クラス C++23
reference 要素への参照型。std::pair<const key_type&, mapped_type&> C++23
const_reference 要素へのconst参照型。std::pair<const key_type&, const mapped_type&> C++23
size_type 要素数を表す符号なし整数型 size_t C++23
difference_type 同一のコンテナを指す iterator の差を表す符号付き整数型 ptrdiff_t C++23
iterator ランダムアクセスイテレータ C++23
const_iterator 読み取り専用ランダムアクセスイテレータ C++23
reverse_iterator 逆順ランダムアクセスイテレータ。std::reverse_iterator<iterator> C++23
const_reverse_iterator 読み取り専用逆順ランダムアクセスイテレータ。std::reverse_iterator<const_iterator> C++23
key_container_type キーを格納するコンテナ型 KeyContainer C++23
mapped_container_type 値を格納するコンテナ型 MappedContainer C++23
containers キーのコンテナと値のコンテナを保持する型 C++23
key_equiv 要素をとってキーの等価比較を行う説明専用の関数オブジェクト C++23

非メンバ関数

要素削除

名前 説明 対応バージョン
erase_if 指定した条件に合致する要素とその分の領域を、コンテナから削除する C++23

非メンバ(Hidden friends)関数

比較演算子

名前 説明 対応バージョン
operator== 左辺と右辺が等しいかの判定を行う C++23
bool operator!=(const flat_multimap& x, const flat_multimap& y); 左辺と右辺が等しくないかの判定を行う (==により使用可能) C++23
operator<=> 三方比較を行う C++23
bool operator<(const flat_multimap& x, const flat_multimap& y); 左辺が右辺より小さいかの判定を行う (<=>により使用可能) C++23
bool operator<=(const flat_multimap& x, const flat_multimap& y); 左辺が右辺より小さいか等しいかの判定を行う (<=>により使用可能) C++23
bool operator>(const flat_multimap& x, const flat_multimap& y); 左辺が右辺より大きいかの判定を行う (<=>により使用可能) C++23
bool operator>=(const flat_multimap& x, const flat_multimap& y); 左辺が右辺より大きいか等しいかの判定を行う (<=>により使用可能) C++23

入れ替え

名前 説明 対応バージョン
swap 2つのflat_multimapオブジェクトを入れ替える C++23

推論補助

名前 説明 対応バージョン
(deduction_guide) クラステンプレートの推論補助 C++23

その他

名前 説明 対応バージョン
uses_allocator flat_multimapによる特殊化 C++23

基本的な使い方

#include <flat_map>
#include <iostream>

int main()
{
  // intをキー、charを値、として扱う連想配列
  // flat_mapとは異なり、キーが重複してもよい
  std::flat_multimap<int, char> fm = {
    {10, 'A'}, {11, 'B'}, {12, 'C'},
    {10, 'a'}, {11, 'b'}, {12, 'c'},
  };

  // 全体を出力する
  for (const auto& [key, value] : fm) {
    std::cout << key << " : " << value << std::endl;
  }
}

出力

10 : A
10 : a
11 : B
11 : b
12 : C
12 : c

キーと要素以外のテンプレートを指定

#include <deque>
#include <flat_map>
#include <iostream>

int main()
{
  std::deque<int> keys = {10, 10, 11, 11, 12, 12};
  std::deque<char> values = {'A', 'a', 'B', 'b', 'C', 'c'};

  // intをキー、charを値として扱う連想配列
  // キーの順序はgreater、キーと値のコンテナはdequeで保持
  std::flat_multimap<int,
                     char,
                     std::greater<int>,
                     std::deque<int>,
                     std::deque<char>> fm(keys, values);

  // 全体を出力する
  for (const auto& [key, value] : fm) {
    std::cout << key << " : " << value << std::endl;
  }
}

出力

12 : C
12 : c
11 : B
11 : b
10 : A
10 : a

バージョン

言語

  • C++23

処理系

参照