Namespaces
Variants

std:: flat_set

From cppreference.net
ヘッダーで定義 <flat_set>
template <

class Key,
class Compare = std:: less < Key > ,
class KeyContainer = std:: vector < Key >

> class flat_set ;
(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 オブジェクトを作成して使用することが可能です。

ただし、 std::flat_set オブジェクト自体は一般的に constexpr にはできません。なぜなら、動的に確保されたストレージは同じ定数式の評価中に解放されなければならないためです。

(C++26以降)

目次

**翻訳の説明:** - 「Contents」を「目次」に翻訳しました - C++専門用語(Iterator invalidation、Template parameters、Member typesなど)は原文のまま保持しました - HTMLタグ、属性、構造は完全に保持しました - 番号付けや書式設定は変更していません

イテレータの無効化

テンプレートパラメータ

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)

非メンバー関数

2つの flat_set の値を辞書順で比較する
(関数テンプレート)
std::swap アルゴリズムを特殊化する
(関数テンプレート)
特定の条件を満たすすべての要素を削除する
(関数テンプレート)

ヘルパークラス

std::uses_allocator 型特性を特殊化する
(クラステンプレートの特殊化)

タグ

範囲の要素がソート済みかつ一意であることを示す
(タグ)

推論ガイド

注記

メンバ型 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

関連項目

コンテナをアダプトしてキーのコレクションを提供し、キーでソートされる
(クラステンプレート)
一意のキーのコレクションで、キーでソートされる
(クラステンプレート)
一意のキーのコレクションで、キーでハッシュされる
(クラステンプレート)