std:: flat_set
|
ヘッダーで定義
<flat_set>
|
||
|
template
<
class
Key,
|
(C++23以降) | |
flat setは、
コンテナアダプタ
であり、型
Key
のユニークなオブジェクトのソートされた集合を格納する連想コンテナの機能を提供します。ソートはキー比較関数
Compare
を使用して行われます。
クラステンプレート
flat_set
は、
KeyContainer
型のオブジェクトとして渡される基盤のソート済みコンテナに対するラッパーとして機能します。
標準ライブラリが Compare 要件を使用するすべての場所では、一意性は同値関係を用いて決定されます。非公式には、二つのオブジェクト a と b は、互いが他方より小さいと比較されない場合に同値と見なされます: ! comp ( a, b ) && ! comp ( b, a ) 。
std::flat_set
は、
Container
、
ReversibleContainer
、
オプションのコンテナ要件
の要件を満たし、さらに
AssociativeContainer
のすべての要件(対数検索計算量を含む)を満たします。ただし以下の例外を除きます:
- ノードに関連する要件は適用されません、
- イテレータの無効化要件が異なります、
- 挿入および削除操作の計算量は線形です。
フラットセットは、ユニークキーを使用する AssociativeContainer の操作のほとんどをサポートします。
std::flat_setのすべてのメンバー関数は
std::flat_set
constexpr
です:定数式の評価中に
std::flat_set
オブジェクトを作成して使用することが可能です。
ただし、
|
(C++26以降) |
目次 |
イテレータの無効化
| このセクションは不完全です |
テンプレートパラメータ
| Key | - |
格納される要素の型。
Key
が
KeyContainer::value_type
と同じ型でない場合、プログラムは不適格となる。
|
| Compare | - | 厳密な弱順序を提供する Compare 型。 |
| KeyContainer | - |
要素を格納する基盤となる
SequenceContainer
の型。そのようなコンテナのイテレータは
LegacyRandomAccessIterator
を満たすか、
random_access_iterator
をモデル化する必要がある。
標準コンテナの std::vector および std::deque はこれらの要件を満たす。 |
メンバー型
| 型 | 定義 |
container_type
|
Key
Container
|
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以降)
かつ
random_access_iterator
で
value_type
を指すもの
|
const_iterator
|
実装定義
LegacyRandomAccessIterator
,
ConstexprIterator
(C++26以降)
かつ
random_access_iterator
で
const
value_type
を指すもの
|
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) |
|
|
(destructor)
(implicitly declared)
|
コンテナアダプタの全要素を破棄する
(public member function) |
|
コンテナアダプタに値を代入する
(公開メンバ関数) |
|
イテレータ |
|
|
先頭を指すイテレータを返す
(公開メンバ関数) |
|
|
終端へのイテレータを返す
(公開メンバ関数) |
|
|
先頭への逆方向イテレータを返す
(公開メンバ関数) |
|
|
末尾を指す逆方向イテレータを返す
(public member function) |
|
容量 |
|
|
コンテナアダプタが空かどうかをチェックする
(public member function) |
|
|
要素数を返す
(公開メンバ関数) |
|
|
格納可能な最大要素数を返す
(public member function) |
|
修飾子 |
|
|
要素をその場で構築する
(公開メンバ関数) |
|
|
ヒントを使用して要素をその場で構築する
(公開メンバー関数) |
|
|
要素を挿入する
(公開メンバ関数) |
|
|
要素の範囲を挿入する
(公開メンバ関数) |
|
|
基となるコンテナを抽出する
(公開メンバー関数) |
|
|
基となるコンテナを置き換える
(公開メンバ関数) |
|
|
要素を削除する
(公開メンバ関数) |
|
|
内容を交換する
(公開メンバー関数) |
|
|
内容をクリアする
(公開メンバー関数) |
|
ルックアップ |
|
|
特定のキーを持つ要素を検索
(public member function) |
|
|
指定されたキーに一致する要素の数を返す
(公開メンバ関数) |
|
|
指定されたキーを持つ要素がコンテナに含まれているかどうかをチェックします
(公開メンバ関数) |
|
|
指定されたキーより
小さくない
最初の要素へのイテレータを返す
(公開メンバ関数) |
|
|
指定されたキーより
大きい
最初の要素へのイテレータを返す
(公開メンバ関数) |
|
|
特定のキーに一致する要素の範囲を返す
(公開メンバ関数) |
|
オブザーバー |
|
|
キーを比較する関数を返す
(公開メンバ関数) |
|
value_type
型のオブジェクト内でキーを比較する関数を返します
(public member function) |
|
非メンバー関数
|
(C++23)
|
2つの
flat_set
の値を辞書順で比較する
(関数テンプレート) |
|
(C++23)
|
std::swap
アルゴリズムを特殊化する
(関数テンプレート) |
|
(C++23)
|
特定の条件を満たすすべての要素を削除する
(関数テンプレート) |
ヘルパークラス
|
std::uses_allocator
型特性を特殊化する
(クラステンプレートの特殊化) |
タグ
|
(C++23)
|
範囲の要素がソート済みかつ一意であることを示す
(タグ) |
推論ガイド
注記
メンバ型
iterator
と
const_iterator
は同じ型のエイリアスである可能性があります。これは、これら2つの型をパラメータ型として使用する関数オーバーロードのペアを定義すると、
One Definition Rule
に違反する可能性があることを意味します。
iterator
は
const_iterator
に変換可能であるため、
const_iterator
をパラメータ型とする単一の関数で代用することができます。
他の標準 container adaptors に対するflat setの利点は以下の通りです:
- 検索が潜在的に高速(検索操作が対数時間計算量であるにもかかわらず)。
- 反復処理が大幅に高速: random access iterators であり、 bidirectional iterators ではない。
- 小さなオブジェクトに対するメモリ消費量が少ない(また、 KeyContainer :: shrink_to_fit ( ) が利用可能な場合は大きなオブジェクトに対しても)。
-
キャッシュパフォーマンスが優れている(
KeyContainerに依存するが、キーは連続したメモリブロックに格納される)。
flat setのいくつかの欠点は以下の通りです:
- 非安定イテレータ(要素の挿入および削除時にイテレータが無効化されます)。
- コピー不可およびムーブ不可な型の値を格納できません。
- 例外安全性が低い(削除および挿入時の値シフト時にコピー/ムーブコンストラクタが例外をスローする可能性があります)。
- 挿入および削除が低速(線形時間)、特にムーブ不可な型の場合。
| 機能テスト マクロ | 値 | 標準 | 機能 |
|---|---|---|---|
__cpp_lib_flat_set
|
202207L
|
(C++23) |
std::flat_set
および
std::flat_multiset
|
__cpp_lib_constexpr_flat_set
|
202502L
|
(C++26) |
constexpr
std::flat_set
|
例
|
このセクションは不完全です
理由: 例がありません |
関連項目
|
(C++23)
|
コンテナをアダプトしてキーのコレクションを提供し、キーでソートされる
(クラステンプレート) |
|
一意のキーのコレクションで、キーでソートされる
(クラステンプレート) |
|
|
(C++11)
|
一意のキーのコレクションで、キーでハッシュされる
(クラステンプレート) |