名前空間
変種
操作

std::flat_set

From cppreference.com
< cpp‎ | container
 
 
 
 
ヘッダ <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要件を使用するすべての箇所で、一意性は同値関係を使用して決定されます。非公式には、2つのオブジェクトabは、どちらも他方より小さいとみなされない場合、つまり!comp(a, b) && !comp(b, a)の場合に同等であるとみなされます。

std::flat_setは、ContainerReversibleContainerオプションのコンテナ要件、およびAssociativeContainerのすべての要件(対数検索の複雑さを含む)を満たしますが、例外があります。

  • ノードに関連する要件は適用されません。
  • イテレータの無効化要件が異なります。
  • 挿入および削除操作の複雑度は線形です。

flat setは、一意なキーを使用するほとんどのAssociativeContainerの操作をサポートします。

std::flat_setのすべてのメンバ関数はconstexprです。定数式の評価においてstd::flat_setオブジェクトを作成して使用することができます。

しかし、std::flat_setオブジェクトは通常constexprにはできません。なぜなら、動的に割り当てられたストレージは、同じ定数式の評価で解放されなければならないからです。

(C++26以降)

目次

[編集] イテレータの無効化

[編集] テンプレートパラメータ

Key - 格納される要素の型。KeyKeyContainer::value_typeと同じ型でない場合、プログラムは不正な形式です。
Compare - 厳密な弱順序を提供するCompare型。
KeyContainer - 要素を格納するための基となるSequenceContainerの型。そのようなコンテナのイテレータはLegacyRandomAccessIteratorを満たすか、random_access_iteratorをモデル化する必要があります。

標準コンテナのstd::vectorstd::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 実装定義のLegacyRandomAccessIteratorConstexprIterator(C++26以降)およびvalue_typeへのrandom_access_iterator[編集]
const_iterator const value_typeへの、処理系定義のLegacyRandomAccessIteratorConstexprIterator(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 型のオブジェクト内のキーを比較する関数を返す
(公開メンバ関数) [編集]

[編集] 非メンバ関数

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

[編集] ヘルパークラス

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

[編集] タグ

範囲の要素がソートされ、一意であることを示す
(タグ)[edit]

[編集] 推論ガイド

[編集] 備考

メンバ型 iteratorconst_iterator は同じ型へのエイリアスかもしれない。これは、これら2つの型をパラメータ型として使用する関数オーバーロードのペアを定義すると、ODR (One Definition Rule) に違反する可能性があることを意味する。iteratorconst_iterator に変換可能なので、代わりに const_iterator をパラメータ型として持つ単一の関数が機能する。

flat setが他の標準のコンテナアダプタに比べて持ついくつかの利点は次のとおりです。

  • 潜在的に高速な検索(検索操作の複雑度は対数であっても)。
  • はるかに高速なイテレーション:双方向イテレータではなく、ランダムアクセスイテレータ
  • 小さなオブジェクトの場合のメモリ消費が少ない(そしてKeyContainer::shrink_to_fit()が利用可能であれば、大きなオブジェクトの場合も)。
  • より良いキャッシュパフォーマンス(KeyContainerに依存しますが、キーは連続したメモリブロックに格納されます)。

flat setのいくつかの欠点は次のとおりです。

  • イテレータが不安定(要素の挿入および消去時にイテレータが無効化される)。
  • コピー不可および移動不可の型の値を格納できない。
  • 例外安全性が弱い(コピー/ムーブコンストラクタは、消去および挿入時に値をシフトするときに例外をスローする可能性がある)。
  • 挿入および消去が遅い(つまり線形時間)、特に移動不可の型の場合。
機能テストマクロ 規格 機能
__cpp_lib_flat_set 202207L (C++23) std::flat_setstd::flat_multiset
__cpp_lib_constexpr_containers 202502L (C++26) constexpr std::flat_set

[編集]

[編集] 関連項目

コンテナを適応させ、キーでソートされたキーのコレクションを提供する
(クラステンプレート) [編集]
ユニークなキーのコレクション、キーによってソートされる
(class template) [編集]
キーによってハッシュ化されたユニークなキーのコレクション
(クラステンプレート) [編集]
English 日本語 中文(简体) 中文(繁體)