Skip to content

Commit bfed2f0

Browse files
committed
flat_multimap : 概要文章を追加 #1448
1 parent f5e7d44 commit bfed2f0

File tree

1 file changed

+37
-0
lines changed

1 file changed

+37
-0
lines changed

reference/flat_map/flat_multimap.md

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,43 @@ namespace std {
1818
* vector[link /reference/vector/vector.md]
1919
2020
## 概要
21+
`flat_multimap` は同一キーの要素を複数格納できる連想コンテナの一種であり、キーとそれに対応する値を格納する。
22+
23+
`std::flat_multimap`は、ノードベースで実装される[`std::multimap`](/reference/map/multimap.md)、ハッシュテーブルで実装される[`std::unordered_multimap`](/reference/unordered_map/unordered_multimap.md)とは異なり、ソート済み配列と二分探索の組み合わせで実装される。これはほかの実装と比較して、メモリ使用量と列挙速度において優位であり、一方で挿入速度と検索速度はほかの実装に劣る。
24+
25+
また、このクラスは分類としては[`std::queue`](/reference/queue/queue.md)や[`std::skack`](/reference/stack/stack.md)と同様のコンテナアダプタに分類され、キーの配列と値の配列の2つを内部で持ち、それを[`std::ranges::zip_view`](/reference/ranges/zip_view.md)で綴じあわせて扱う実装となっている。
26+
27+
このコンテナクラスは、ランダムアクセスイテレータをサポートする。
28+
29+
30+
### ほかの連想コンテナとの要件の違い
31+
このクラスは要件として、コンテナクラスと、逆順コンテナクラスであることは満たすが、連想コンテナの要件としては以下を満たさない:
32+
33+
- node handleに関する要件
34+
- イテレータ無効化に関する要件
35+
- 単一要素の挿入と削除に線形時間かかる (挿入位置のイテレータを指定したとしても)
36+
37+
また、このコンテナはメモリアロケータを指定できない設計にもなっている。
38+
39+
`value_type`は、[`std::multimap`](/reference/map/multimap.md)では[`std::pair`](/reference/utility/pair.md)`<const Key, T>`だが、このクラスは[`std::pair`](/reference/utility/pair.md)`<Key, T>`である (`const`がつかない)。
40+
41+
以下の不変条件をもち、メンバ関数のいずれかが例外によって終了した場合には不変条件の状態に復元される (ただし、その復元操作によってコンテナが空になる可能性がある):
42+
43+
- キーの配列と値の配列が、同じ要素数をもつ
44+
- キーの配列が、指定された比較関数オブジェクトを尊重してソートを行う
45+
- 値の配列内のオフセット`off`の値は、キー配列内のオフセット`off`のキーに関連付けられた値である
46+
47+
48+
## テンプレートパラメータ制約
49+
- `KeyContainer`と`MappedContainer`に指定するコンテナ型は、
50+
- シーケンスコンテナの要件を満たし、
51+
- ランダムアクセスイテレータをもち、
52+
- 例外を送出しないメンバ関数`size()`と`max_size()`をもつこと
53+
54+
55+
## 適格要件
56+
- `Key`が`KeyContainer::value_type`と同じ型であること
57+
- `T`が`MappedContainer::value_type`と同じ型であること
2158
2259
2360
## メンバ関数

0 commit comments

Comments
 (0)