C++の基礎 - 連想コンテナ
ナビゲーションに移動
検索に移動
概要
std::set
は、ユニークな要素を格納する連想コンテナの一種であり、要素自身がキーとなる。
連想コンテナは、特にそれらキーによる要素アクセスが効率的になるよう設計されたコンテナである。
(要素への相対位置または絶対位置によるアクセスが効率的であるシーケンシャルコンテナとは異なる)
内部的には、std::set
内の要素は、コンテナの構築時に設定された狭義の弱順序基準にしたがって小さいものから大きいものへとソートされる。
std::set
は一般的に、二分木として実装される。
したがって、連想コンテナであるstd::set
の主な特性は以下の通りである。
- ユニークな要素の値
- 互いに等しい2つの要素が
std::set
に格納されることはない。
複数の等しい値を許す同様の連想コンテナは、std::multiset
を参照すること。
- 互いに等しい2つの要素が
- 要素の値はキーそのものである。
- キーを使用して要素にアクセスする。
- キーとは異なる値へマップする同様の連想コンテナ (連想配列) は、
std::map
を参照すること。
- 要素は常に狭義の弱順序に従う。
std::set
は、双方向イテレータをサポートする。
値の許可
以下の例では、最初に許可された値のリストをstd::set
として定義している。
このデータ構造を使用する理由は、要素の検索が非常に効率的であるためである。 (検索の時間複雑度は、O(log n))
その後、任意の値がこの連想コンテナに含まれているかどうかを確認するため、find
メソッドを使用している。
値が含まれていない場合は、50を代入している。
#include <set>
// 許可された値のセットを定義
const std::set<int> allowedValues = {10, 20, 30, 40, 45, 50, 55, 60, 70};
// 任意のint型の変数
int hoge = 100;
// 任意のint型の変数の値において、許可された値のセットに含まれていない場合は50を代入
if (allowedValues.find(hoge) == allowedValues.end()) {
hoge = 50;
}