class template
std::flat_set(C++23)
namespace std {
template <class Key,
class Compare = less<Key>,
class KeyContainer = vector<Key>>
class flat_set;
}
概要
std::flat_set
は、重複しない要素を格納する連想コンテナの一種であり、要素自身がキーとなる、集合を表すクラスである。
std::flat_set
は、ノードベースで実装されるstd::set
、ハッシュテーブルで実装されるstd::unordered_set
とは異なり、ソート済み配列と二分探索の組み合わせで実装される。これはほかの実装と比較して、メモリ使用量と列挙速度において優位であり、一方で挿入速度と検索速度はほかの実装に劣る。
また、このクラスは分類としてはstd::queue
やstd::skack
と同様のコンテナアダプタに分類され、キーの配列をラップして扱う実装となっている。
このコンテナクラスは、ランダムアクセスイテレータをサポートする。
ほかの連想コンテナとの要件の違い
このクラスは要件として、コンテナクラスと、逆順コンテナクラスであることは満たすが、連想コンテナの要件としては以下を満たさない:
- node handleに関する要件
- イテレータ無効化に関する要件
- 単一要素の挿入と削除に線形時間かかる (挿入位置のイテレータを指定したとしても)
また、このコンテナはメモリアロケータを指定できない設計にもなっている。
KeyContainer
に指定するコンテナ型は、
- シーケンスコンテナの要件を満たし、
- ランダムアクセスイテレータをもつこと
Key
がKeyContainer::value_type
と同じ型であること
メンバ関数
構築・破棄
イテレータ
名前 |
説明 |
対応バージョン |
begin |
先頭を指すイテレータを取得する |
C++23 |
cbegin |
先頭を指す読み取り専用イテレータを取得する |
C++23 |
end |
末尾の次を指すイテレータを取得する |
C++23 |
cend |
末尾の次を指す読み取り専用イテレータを取得する |
C++23 |
rbegin |
末尾を指す逆イテレータを取得する |
C++23 |
crbegin |
末尾を指す読み取り専用逆イテレータを取得する |
C++23 |
rend |
先頭の前を指す逆イテレータを取得する |
C++23 |
crend |
先頭の前を指す読み取り専用逆イテレータを取得する |
C++23 |
領域
名前 |
説明 |
対応バージョン |
empty |
コンテナが空であるかどうかを調べる |
C++23 |
size |
要素数を取得する |
C++23 |
max_size |
格納可能な最大の要素数を取得する |
C++23 |
コンテナの変更
要素アクセス
オブザーバー
メンバ型
名前 |
説明 |
対応バージョン |
key_type |
キーの型。テンプレートパラメータ Key |
C++23 |
value_type |
要素の型。テンプレートパラメータ Key |
C++23 |
key_compare |
キーの大小関係を判定する二項述語の型。テンプレートパラメータ Compare |
C++23 |
value_compare |
要素の大小関係を判定する二項述語の型。テンプレートパラメータ Compare |
C++23 |
reference |
要素への参照型。value_type& |
C++23 |
const_reference |
要素へのconst 参照型。const value_type& |
C++23 |
size_type |
要素数を表す符号なし整数型 size_t |
C++23 |
difference_type |
同一のコンテナを指す iterator の差を表す符号付き整数型 ptrdiff_t |
C++23 |
iterator |
ランダムアクセスイテレータ |
C++23 |
const_iterator |
読み取り専用ランダムアクセスイテレータ |
C++23 |
reverse_iterator |
逆順ランダムアクセスイテレータ。std::reverse_iterator<iterator> |
C++23 |
const_reverse_iterator |
読み取り専用逆順ランダムアクセスイテレータ。std::reverse_iterator<const_iterator> |
C++23 |
container_type |
キーを格納するコンテナ型 KeyContainer |
C++23 |
非メンバ関数
要素削除
名前 |
説明 |
対応バージョン |
erase_if |
指定した条件に合致する要素とその分の領域を、コンテナから削除する |
C++23 |
非メンバ(Hidden friends)関数
比較演算子
名前 |
説明 |
対応バージョン |
operator== |
左辺と右辺が等しいかの判定を行う |
C++23 |
bool operator!=(const flat_set& x, const flat_set& y); |
左辺と右辺が等しくないかの判定を行う (== により使用可能) |
C++23 |
operator<=> |
三方比較を行う |
C++23 |
bool operator<(const flat_set& x, const flat_set& y); |
左辺が右辺より小さいかの判定を行う (<=> により使用可能) |
C++23 |
bool operator<=(const flat_set& x, const flat_set& y); |
左辺が右辺より小さいか等しいかの判定を行う (<=> により使用可能) |
C++23 |
bool operator>(const flat_set& x, const flat_set& y); |
左辺が右辺より大きいかの判定を行う (<=> により使用可能) |
C++23 |
bool operator>=(const flat_set& x, const flat_set& y); |
左辺が右辺より大きいか等しいかの判定を行う (<=> により使用可能) |
C++23 |
入れ替え
名前 |
説明 |
対応バージョン |
swap |
2つのflat_set オブジェクトを入れ替える |
C++23 |
推論補助
その他
例
基本的な使い方
出力
Alice
Alice
Bob
Carol
キー以外のテンプレートを指定
出力
8 7 5 4 2 1
バージョン
言語
処理系
参照