std::flat_set
| ヘッダ <flat_set> で定義 |
||
| template< class Key, |
(C++23から) | |
flat setは、型Keyの一意なオブジェクトのソートされたセットを格納する連想コンテナの機能を提供するコンテナアダプタです。ソートはキー比較関数Compareを使用して行われます。
クラステンプレートflat_setは、型KeyContainerのオブジェクトとして渡される基になるソート済みコンテナのラッパーとして機能します。
標準ライブラリがCompare要件を使用するすべての箇所で、一意性は同値関係を使用して決定されます。非公式には、2つのオブジェクトaとbは、どちらも他方より小さいとみなされない場合、つまり!comp(a, b) && !comp(b, a)の場合に同等であるとみなされます。
std::flat_setは、Container、ReversibleContainer、オプションのコンテナ要件、およびAssociativeContainerのすべての要件(対数検索の複雑さを含む)を満たしますが、例外があります。
- ノードに関連する要件は適用されません。
- イテレータの無効化要件が異なります。
- 挿入および削除操作の複雑度は線形です。
flat setは、一意なキーを使用するほとんどのAssociativeContainerの操作をサポートします。
|
|
(C++26以降) |
目次 |
[編集] イテレータの無効化
| このセクションは未完成です |
[編集] テンプレートパラメータ
| Key | - | 格納される要素の型。KeyがKeyContainer::value_typeと同じ型でない場合、プログラムは不正な形式です。 |
| Compare | - | 厳密な弱順序を提供するCompare型。 |
| KeyContainer | - | 要素を格納するための基となるSequenceContainerの型。そのようなコンテナのイテレータはLegacyRandomAccessIteratorを満たすか、random_access_iteratorをモデル化する必要があります。標準コンテナのstd::vectorとstd::dequeはこれらの要件を満たします。 |
[編集] メンバ型
| 型 | 定義 |
container_type
|
KeyContainer |
key_type
|
Key |
value_type
|
Key |
key_compare
|
Compare |
value_compare
|
Compare |
reference
|
value_type& |
const_reference
|
const value_type& |
size_type
|
typename KeyContainer::size_type |
difference_type
|
typename KeyContainer::difference_type |
iterator
|
実装定義のLegacyRandomAccessIterator、ConstexprIterator(C++26以降)およびvalue_typeへのrandom_access_iterator |
const_iterator
|
const value_typeへの、処理系定義のLegacyRandomAccessIterator、ConstexprIterator(C++26から)であり、random_access_iteratorでもある |
reverse_iterator
|
std::reverse_iterator<iterator> |
const_reverse_iterator
|
std::reverse_iterator<const_iterator> |
[編集] メンバオブジェクト
| メンバ | 説明 |
container_type c (private) |
適合されたコンテナ (説明用のメンバオブジェクト*) |
key_compare compare (private) |
比較関数オブジェクト (説明用のメンバオブジェクト*) |
[編集] メンバ関数
flat_setを構築する(公開メンバ関数) | |
| (デストラクタ) (暗黙的に宣言) |
コンテナアダプタのすべての要素を破棄する (public member function) |
| コンテナアダプタに値を割り当てる (公開メンバ関数) | |
イテレータ | |
| 先頭へのイテレータを返す (public メンバ関数) | |
| 末尾へのイテレータを返す (public メンバ関数) | |
| 先頭への逆イテレータを返す (public メンバ関数) | |
| 末尾への逆イテレータを返す (public メンバ関数) | |
容量 | |
| コンテナアダプタが空かどうかをチェックする (public メンバ関数) | |
| 要素数を返す (public メンバ関数) | |
| 可能な最大要素数を返す (public メンバ関数) | |
変更 | |
| 要素を直接構築する (公開メンバ関数) | |
| ヒントを使用して要素を直接構築する (公開メンバ関数) | |
| 要素を挿入する (公開メンバ関数) | |
| 要素の範囲を挿入する (公開メンバ関数) | |
| 基になるコンテナを抽出する (公開メンバ関数) | |
| 基になるコンテナを置き換える (public member function) | |
| 要素を削除する (公開メンバ関数) | |
| 内容を交換する (public メンバ関数) | |
| 内容をクリアする (公開メンバ関数) | |
検索 | |
| 特定のキーを持つ要素を検索する (公開メンバ関数) | |
| 特定のキーに一致する要素の数を返す (公開メンバ関数) | |
| コンテナが特定のキーを持つ要素を含むか確認する (公開メンバ関数) | |
| 指定されたキーより小さくない最初の要素へのイテレータを返す (公開メンバ関数) | |
| 指定されたキーより大きい最初の要素へのイテレータを返す (公開メンバ関数) | |
| 特定のキーに一致する要素の範囲を返す (公開メンバ関数) | |
監視 | |
| キーを比較する関数を返す (公開メンバ関数) | |
value_type 型のオブジェクト内のキーを比較する関数を返す(公開メンバ関数) | |
[編集] 非メンバ関数
| (C++23) |
2つのflat_setの値を辞書順に比較する(関数テンプレート) |
| (C++23) |
std::swap アルゴリズムを特殊化する (関数テンプレート) |
| (C++23) |
特定の基準を満たすすべての要素を削除する (関数テンプレート) |
[編集] ヘルパークラス
| std::uses_allocator 型特性を特殊化する (クラス テンプレート特殊化) |
[編集] タグ
| (C++23) |
範囲の要素がソートされ、一意であることを示す (タグ) |
[編集] 推論ガイド
[編集] 備考
メンバ型 iterator と const_iterator は同じ型へのエイリアスかもしれない。これは、これら2つの型をパラメータ型として使用する関数オーバーロードのペアを定義すると、ODR (One Definition Rule) に違反する可能性があることを意味する。iterator は const_iterator に変換可能なので、代わりに const_iterator をパラメータ型として持つ単一の関数が機能する。
flat setが他の標準のコンテナアダプタに比べて持ついくつかの利点は次のとおりです。
- 潜在的に高速な検索(検索操作の複雑度は対数であっても)。
- はるかに高速なイテレーション:双方向イテレータではなく、ランダムアクセスイテレータ。
- 小さなオブジェクトの場合のメモリ消費が少ない(そしてKeyContainer::shrink_to_fit()が利用可能であれば、大きなオブジェクトの場合も)。
- より良いキャッシュパフォーマンス(
KeyContainerに依存しますが、キーは連続したメモリブロックに格納されます)。
flat setのいくつかの欠点は次のとおりです。
- イテレータが不安定(要素の挿入および消去時にイテレータが無効化される)。
- コピー不可および移動不可の型の値を格納できない。
- 例外安全性が弱い(コピー/ムーブコンストラクタは、消去および挿入時に値をシフトするときに例外をスローする可能性がある)。
- 挿入および消去が遅い(つまり線形時間)、特に移動不可の型の場合。
| 機能テストマクロ | 値 | 規格 | 機能 |
|---|---|---|---|
__cpp_lib_flat_set |
202207L |
(C++23) | std::flat_setとstd::flat_multiset |
__cpp_lib_constexpr_containers |
202502L |
(C++26) | constexpr std::flat_set |
[編集] 例
| このセクションは未完成です 理由: 例がありません |
[編集] 関連項目
| (C++23) |
コンテナを適応させ、キーでソートされたキーのコレクションを提供する (クラステンプレート) |
| ユニークなキーのコレクション、キーによってソートされる (class template) | |
| (C++11) |
キーによってハッシュ化されたユニークなキーのコレクション (クラステンプレート) |