|
| 1 | +# flat_multiset |
| 2 | +* flat_multiset[meta header] |
| 3 | +* std[meta namespace] |
| 4 | +* class template[meta id-type] |
| 5 | +* cpp23[meta cpp] |
| 6 | + |
| 7 | +```cpp |
| 8 | +namespace std { |
| 9 | + template <class Key, |
| 10 | + class Compare = less<Key>, |
| 11 | + class KeyContainer = vector<Key>> |
| 12 | + class flat_multiset; |
| 13 | +} |
| 14 | +``` |
| 15 | +* less[link ../functional/less.md] |
| 16 | +* vector[link /reference/vector/vector.md] |
| 17 | +
|
| 18 | +## 概要 |
| 19 | +
|
| 20 | +
|
| 21 | +## メンバ関数 |
| 22 | +### 構築・破棄 |
| 23 | +
|
| 24 | +| 名前 | 説明 | 対応バージョン | |
| 25 | +|---------------------------------|----------------|-------| |
| 26 | +| [`(constructor)`](flat_multiset/op_constructor.md) | コンストラクタ | C++23 | |
| 27 | +| [`(destructor)`](flat_multiset/op_destructor.md.nolink) | デストラクタ | C++23 | |
| 28 | +| [`operator=`](flat_multiset/op_assign.md) | 代入演算子 | C++23 | |
| 29 | +
|
| 30 | +
|
| 31 | +### イテレータ |
| 32 | +
|
| 33 | +| 名前 | 説明 | 対応バージョン | |
| 34 | +|---------------------------------------|--------------------------------------------------|-------| |
| 35 | +| [`begin`](flat_multiset/begin.md) | 先頭を指すイテレータを取得する | C++23 | |
| 36 | +| [`cbegin`](flat_multiset/cbegin.md) | 先頭を指す読み取り専用イテレータを取得する | C++23 | |
| 37 | +| [`end`](flat_multiset/end.md) | 末尾の次を指すイテレータを取得する | C++23 | |
| 38 | +| [`cend`](flat_multiset/cend.md) | 末尾の次を指す読み取り専用イテレータを取得する | C++23 | |
| 39 | +| [`rbegin`](flat_multiset/rbegin.md) | 末尾を指す逆イテレータを取得する | C++23 | |
| 40 | +| [`crbegin`](flat_multiset/crbegin.md) | 末尾を指す読み取り専用逆イテレータを取得する | C++23 | |
| 41 | +| [`rend`](flat_multiset/rend.md) | 先頭の前を指す逆イテレータを取得する | C++23 | |
| 42 | +| [`crend`](flat_multiset/crend.md) | 先頭の前を指す読み取り専用逆イテレータを取得する | C++23 | |
| 43 | +
|
| 44 | +
|
| 45 | +### 領域 |
| 46 | +
|
| 47 | +| 名前 | 説明 | 対応バージョン | |
| 48 | +|-----------------------------------------|------------------------------------|-------| |
| 49 | +| [`empty`](flat_multiset/empty.md) | コンテナが空であるかどうかを調べる | C++23 | |
| 50 | +| [`size`](flat_multiset/size.md) | 要素数を取得する | C++23 | |
| 51 | +| [`max_size`](flat_multiset/max_size.md) | 格納可能な最大の要素数を取得する | C++23 | |
| 52 | +
|
| 53 | +
|
| 54 | +### コンテナの変更 |
| 55 | +
|
| 56 | +| 名前 | 説明 | 対応バージョン | |
| 57 | +|-------------------------------------------------|--------------------------------------------|----------------| |
| 58 | +| [`clear`](flat_multiset/clear.md) | 全ての要素を削除する | C++23 | |
| 59 | +| [`insert`](flat_multiset/insert.md) | 要素を挿入する | C++23 | |
| 60 | +| [`insert_range`](flat_multiset/insert_range.md) | Rangeを挿入する | C++23 | |
| 61 | +| [`emplace`](flat_multiset/emplace.md) | 要素を直接構築する | C++23 | |
| 62 | +| [`emplace_hint`](flat_multiset/emplace_hint.md) | ヒントを使って要素を直接構築する | C++23 | |
| 63 | +| [`erase`](flat_multiset/erase.md) | 要素を削除する | C++23 | |
| 64 | +| [`swap`](flat_multiset/swap.md) | コンテンツを交換する | C++23 | |
| 65 | +| [`extract`](flat_multiset/extract.md) | キーのコンテナを取得する | C++23 | |
| 66 | +| [`replace`](flat_multiset/replace.md) | キーのコンテナを置き換える | C++23 | |
| 67 | +
|
| 68 | +### 要素アクセス |
| 69 | +
|
| 70 | +| 名前 | 説明 | 対応バージョン | |
| 71 | +|-----------------------------------------------|--------------------------------------------|-------| |
| 72 | +| [`count`](flat_multiset/count.md) | 指定したキーにマッチする要素の数を取得する | C++23 | |
| 73 | +| [`find`](flat_multiset/find.md) | 指定したキーで要素を探す | C++23 | |
| 74 | +| [`contains`](flat_multiset/contains.md) | 指定したキーの要素が含まれているかを判定する | C++23 | |
| 75 | +| [`equal_range`](flat_multiset/equal_range.md) | 指定したキーにマッチする要素範囲を取得する | C++23 | |
| 76 | +| [`lower_bound`](flat_multiset/lower_bound.md) | 与えられた値より小さくない最初の要素へのイテレータを取得する | C++23 | |
| 77 | +| [`upper_bound`](flat_multiset/upper_bound.md) | 特定の値よりも大きい最初の要素へのイテレータを取得する | C++23 | |
| 78 | +
|
| 79 | +### オブザーバー |
| 80 | +
|
| 81 | +| 名前 | 説明 | 対応バージョン | |
| 82 | +|---------------------------------------------|----------------------------------------|----------------| |
| 83 | +| [`key_comp`](flat_multiset/key_comp.md) | キー比較用の関数オブジェクトを取得する | C++23 | |
| 84 | +| [`value_comp`](flat_multiset/value_comp.md) | 要素比較用の関数オブジェクトを取得する | C++23 | |
| 85 | +
|
| 86 | +
|
| 87 | +## メンバ型 |
| 88 | +
|
| 89 | +| 名前 | 説明 | 対応バージョン | |
| 90 | +|--------------------------|---------------------------|----------------| |
| 91 | +| `key_type` | キーの型。テンプレートパラメータ `Key` | C++23 | |
| 92 | +| `value_type` | 要素の型。テンプレートパラメータ `Key` | C++23 | |
| 93 | +| `key_compare` | キーの大小関係を判定する二項述語の型。テンプレートパラメータ `Compare` | C++23 | |
| 94 | +| `value_compare` | 要素の大小関係を判定する二項述語の型。テンプレートパラメータ `Compare` | C++23 | |
| 95 | +| `reference` | 要素への参照型。`value_type&` | C++23 | |
| 96 | +| `const_reference` | 要素への`const`参照型。`const value_type&` | C++23 | |
| 97 | +| `size_type` | 要素数を表す符号なし整数型 [`size_t`](/reference/cstddef/size_t.md) | C++23 | |
| 98 | +| `difference_type` | 同一のコンテナを指す `iterator` の差を表す符号付き整数型 [`ptrdiff_t`](/reference/cstddef/ptrdiff_t.md) | C++23 | |
| 99 | +| `iterator` | ランダムアクセスイテレータ | C++23 | |
| 100 | +| `const_iterator` | 読み取り専用ランダムアクセスイテレータ | C++23 | |
| 101 | +| `reverse_iterator` | 逆順ランダムアクセスイテレータ。[`std::reverse_iterator`](/reference/iterator/reverse_iterator.md)`<iterator>` | C++23 | |
| 102 | +| `const_reverse_iterator` | 読み取り専用逆順ランダムアクセスイテレータ。[`std::reverse_iterator`](/reference/iterator/reverse_iterator.md)`<const_iterator>` | C++23 | |
| 103 | +| `container_type` | キーを格納するコンテナ型 `KeyContainer` | C++23 | |
| 104 | +
|
| 105 | +
|
| 106 | +## 非メンバ関数 |
| 107 | +### 要素削除 |
| 108 | +
|
| 109 | +| 名前 | 説明 | 対応バージョン | |
| 110 | +|----------------------------------------------|-------------------------------------|----------------| |
| 111 | +| [`erase_if`](flat_multiset/erase_if_free.md) | 指定した条件に合致する要素とその分の領域を、コンテナから削除する | C++23 | |
| 112 | +
|
| 113 | +
|
| 114 | +## 非メンバ(*Hidden friends*)関数 |
| 115 | +### 比較演算子 |
| 116 | +
|
| 117 | +| 名前 | 説明 | 対応バージョン | |
| 118 | +|--------------------------------------------------------------------|----------------------------|-------| |
| 119 | +| [`operator==`](flat_multiset/op_equal.md) | 左辺と右辺が等しいかの判定を行う | C++23 | |
| 120 | +| `bool operator!=(const flat_multiset& x, const flat_multiset& y);` | 左辺と右辺が等しくないかの判定を行う (`==`により使用可能) | C++23 | |
| 121 | +| [`operator<=>`](flat_multiset/op_compare_3way.md) | 三方比較を行う | C++23 | |
| 122 | +| `bool operator<(const flat_multiset& x, const flat_multiset& y);` | 左辺が右辺より小さいかの判定を行う (`<=>`により使用可能) | C++23 | |
| 123 | +| `bool operator<=(const flat_multiset& x, const flat_multiset& y);` | 左辺が右辺より小さいか等しいかの判定を行う (`<=>`により使用可能) | C++23 | |
| 124 | +| `bool operator>(const flat_multiset& x, const flat_multiset& y);` | 左辺が右辺より大きいかの判定を行う (`<=>`により使用可能) | C++23 | |
| 125 | +| `bool operator>=(const flat_multiset& x, const flat_multiset& y);` | 左辺が右辺より大きいか等しいかの判定を行う (`<=>`により使用可能) | C++23 | |
| 126 | +
|
| 127 | +
|
| 128 | +### 入れ替え |
| 129 | +
|
| 130 | +| 名前 | 説明 | 対応バージョン | |
| 131 | +|------|------|----------------| |
| 132 | +| [`swap`](flat_multiset/swap_free.md.nolink) | 2つの`flat_multiset`オブジェクトを入れ替える | C++23 | |
| 133 | +
|
| 134 | +
|
| 135 | +## 推論補助 |
| 136 | +
|
| 137 | +| 名前 | 説明 | 対応バージョン | |
| 138 | +|---------------------------------------------|------------------------------------|-------| |
| 139 | +| [`(deduction_guide)`](flat_multiset/op_deduction_guide.md.nolink) | クラステンプレートの推論補助 | C++23 | |
| 140 | +
|
| 141 | +
|
| 142 | +## その他 |
| 143 | +
|
| 144 | +| 名前 | 説明 | 対応バージョン | |
| 145 | +|------------------------------------------------|----------------------|-------| |
| 146 | +| [`uses_allocator`](flat_multiset/uses_allocator.md) | `flat_multiset`による特殊化 | C++23 | |
| 147 | +
|
| 148 | +
|
| 149 | +
|
| 150 | +## 例 |
| 151 | +### 基本的な使い方 |
| 152 | +```cpp example |
| 153 | +#include <flat_set> |
| 154 | +#include <iostream> |
| 155 | +#include <string> |
| 156 | +
|
| 157 | +int main() |
| 158 | +{ |
| 159 | + // stringをキーとして扱う連想配列 |
| 160 | + std::flat_multiset<std::string> fs = {"Carol", "Alice", "Bob", "Carol"}; |
| 161 | +
|
| 162 | + // 検索 : キーを指定し、イテレータを得る |
| 163 | + auto it = fs.find("Alice"); |
| 164 | + std::cout << *it << std::endl |
| 165 | + << std::endl; |
| 166 | +
|
| 167 | + // 全体を出力する |
| 168 | + for (const auto& str : fs) { |
| 169 | + std::cout << str << std::endl; |
| 170 | + } |
| 171 | +} |
| 172 | +``` |
| 173 | +* fs.find[link flat_multiset/find.md] |
| 174 | + |
| 175 | +#### 出力 |
| 176 | +``` |
| 177 | +Alice |
| 178 | +
|
| 179 | +Alice |
| 180 | +Bob |
| 181 | +Carol |
| 182 | +Carol |
| 183 | +``` |
| 184 | + |
| 185 | +### キー以外のテンプレートを指定 |
| 186 | +```cpp example |
| 187 | +#include <deque> |
| 188 | +#include <flat_set> |
| 189 | +#include <iostream> |
| 190 | + |
| 191 | +int main() |
| 192 | +{ |
| 193 | + std::deque<int> keys = {1, 4, 2, 8, 5, 7}; |
| 194 | + |
| 195 | + // intをキーとして扱う連想配列 |
| 196 | + // キーの順序はgreater、キーのコンテナはdequeで保持 |
| 197 | + std::flat_multiset<int, |
| 198 | + std::greater<int>, |
| 199 | + std::deque<int>> fs(keys); |
| 200 | + |
| 201 | + // 全体を出力する |
| 202 | + for (int i : fs) { |
| 203 | + std::cout << i << " "; |
| 204 | + } |
| 205 | + std::cout << std::endl; |
| 206 | +} |
| 207 | +``` |
| 208 | +* std::greater[link ../functional/greater.md] |
| 209 | + |
| 210 | +#### 出力 |
| 211 | +``` |
| 212 | +8 7 5 4 2 1 |
| 213 | +``` |
| 214 | + |
| 215 | + |
| 216 | +## バージョン |
| 217 | +### 言語 |
| 218 | +- C++23 |
| 219 | + |
| 220 | +### 処理系 |
| 221 | +- [Clang](/implementation.md#clang): ?? |
| 222 | +- [GCC](/implementation.md#gcc): ?? |
| 223 | +- [Visual C++](/implementation.md#visual_cpp): ?? |
| 224 | + |
| 225 | + |
| 226 | +## 参照 |
| 227 | +- [P1222R0 A Standard `flat_set`](hhttps://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1222r0.pdf) |
| 228 | + - C++23で`flat_set`が導入された経緯・動機・設計について記載されている |
| 229 | +- [P1222R4 A Standard `flat_set`](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p1222r4.pdf) |
| 230 | + - C++23で導入された`flat_set`の仕様 |
0 commit comments