記事ディレクトリ
1.回収容器をセットする
1. セット収集コンテナの紹介
C++言語におけるSTLコンテナ内のセットコンテナを「セットコンテナ」といいます。
- コンテナ内の各要素は「一意」です。
- そして、コレクション コンテナ内の要素は特定の順序で配置されます。
要素をセット コレクション コンテナーに挿入する場合、まずその要素がコレクション内にすでに存在するかどうかを確認し、次に並べ替えルールに従って指定された位置に要素を挿入します。
セット コレクション コンテナーは、指定された位置への要素の挿入をサポートしていません。
セット コレクション コンテナーは、添え字の位置を使用した要素への直接アクセスもサポートしていません。
セット コレクション コンテナーを使用する前に、セット ヘッダー ファイルをインポートする必要があります。
#include "set"
セット コンテナに似たコンテナには、マルチセット コンテナが含まれます。唯一の違いは、セット内の要素は 1 回しか出現できないのに対し、マルチセット内の要素は複数回出現できることです。
セット コレクション コンテナ内の要素を直接変更することはできません。最初に元の要素を削除することのみが可能で、その後、新しい要素を挿入できます。
2. セットコレクションコンテナ操作の時間計算量
セット コレクション コンテナーの最下層は、「赤黒ツリー」データ構造を使用して実装されています。赤黒ツリーは「バランスの取れたバイナリ ツリー」であり、線形テーブルよりも高速な挿入/削除操作が特徴です。
セット コレクション コンテナー操作の時間計算量は、赤黒ツリー操作の時間計算量と同じです。
赤黒ツリーは自己平衡型二分探索ツリーであり、その挿入操作と削除操作の時間計算量は、特定の実装と操作の種類によって異なります。
赤黒ツリーの挿入/削除操作は、次の 2 つの状況に分けられます。
- 平均的な状況下では、赤黒ツリーの挿入/削除操作の時間計算量は O(log n) です。
- 最悪の場合:赤黒ツリーの挿入/削除操作の時間計算量は O(n) で、すべてのノードを通過する必要があり、発生確率は小さいです。
上記の時間計算量の n は、赤黒ツリー内の要素ノードの数を指します。
赤黒ツリーと比較すると、線形テーブルで挿入・削除操作を行う場合の計算量はO(n)であり、明らかに赤黒ツリー/セットコレクションコンテナの挿入・削除操作の性能が高いことがわかります。 ;
3. 集合収集コンテナの共通操作
set コレクションコンテナーの一般的な操作:
- 要素の挿入:挿入関数を呼び出して、要素をセット コレクション コンテナーに挿入します。要素がすでに存在する場合、操作は実行されません。
- 要素の削除:消去関数を呼び出して、設定されたコレクション コンテナ内の指定された要素を削除します。要素が存在しない場合、操作は実行されません。
- コンテナーを走査する: set<T>::iterator イテレーターを使用して、セット コレクション コンテナーを走査します。
- 要素の検索: find 関数を呼び出して、要素がセット内に存在するかどうかを確認します。要素が存在する場合、このメソッドはその要素を指す反復子を返します。要素が存在しない場合は、セットの末尾を指す反復子を返します。
2. コード例 - コレクションコンテナーの設定
1. コード例
#include "iostream"
using namespace std;
#include "set"
int main() {
// set 集合容器
set<int> se;
// 向容器中插入元素
se.insert(3);
se.insert(1);
se.insert(2);
// 遍历 set 集合容器
for (set<int>::iterator it = se.begin(); it != se.end(); it++)
{
cout << *it << " ";
}
// 回车换行
cout << endl;
// 控制台暂停 , 按任意键继续向后执行
system("pause");
return 0;
};
2. 実行結果
の結果:
1 2 3
Press any key to continue . . .