セットSTLから削除および検索を挿入するC++プログラム
整数型データのセットデータ構造があるとします。標準入力では、n個のクエリを提供します。各クエリ(各行)には、2つの要素があります。 1つ目は演算子、2つ目は要素です。操作は以下のようになります-
-
入れる。これにより、要素がセットに挿入されます
-
消去。これにより、セットから要素が削除されます(存在する場合)
-
探す。これにより、要素がセット内で検索されます。存在する場合は「はい」、そうでない場合は「いいえ」と表示されます。
したがって、入力がn =7の場合、クエリ=[[1,5]、[1,8]、[1,3]、[2,8]、[1,9]、[3,8]、 [3,3]]の場合、8がセットに存在せず、3が存在するため、出力は[いいえ、はい]になります。
これを解決するには、次の手順に従います-
- 1セットを定義する
- sを反復処理する1つのセットイテレータ'it'を定義します
- q:=クエリの数
- qがゼロ以外の場合、各反復後にqを減らし、次のようにします。
- クエリタイプqtを取る
- qt
- の場合
- qtが1の場合、xsを挿入します
- ブロックから出てください
- qtが2の場合、sからxを削除します
- ブロックから出てください
- qtが3の場合、
- その中のfind(x)を呼び出します
- sの最後の要素と同じ場合、次のようになります。
- 印刷しない
- それ以外の場合
- はいを印刷
- ブロックから出てください
- qtが1の場合、xsを挿入します
例
理解を深めるために、次の実装を見てみましょう-
#include <iostream> #include <set> using namespace std; int main(){ set<int> s; set<int>::iterator it; int q,x; int qt; cin >> q; while(q--){ cin>>qt>>x; switch(qt){ case 1:s.insert(x); break; case 2:s.erase(x); break; case 3:it=s.find(x); if(it==s.end()) cout<<"No"<<endl; else cout<<"Yes"<<endl; break; } } return 0; }
入力
7 1 5 1 8 1 3 2 8 1 9 3 8 3 3
出力
No Yes
-
STLにSet_Intersectionを実装するC++プログラム
2つのセットの共通部分は、両方のセットに共通する要素によってのみ形成されます。関数によってコピーされる要素は、常に同じ順序で最初のセットから取得されます。両方のセットの要素はすでに注文されている必要があります。 一般的な集合演算は-です セットユニオン 交差点を設定 対称集合の差または排他的論理和 差または減算を設定 アルゴリズム Begin Declare set vector v and iterator st. Initialize st = set_intersection (set1, set1 + n, set2, s
-
STLにSet_Differenceを実装するC++プログラム
2つのセットの違いは、2番目のセットではなく、最初のセットに存在する要素によってのみ形成されます。関数によってコピーされる要素は、常に同じ順序で最初のセットから取得されます。両方のセットの要素はすでに注文されている必要があります。 一般的な集合演算は-です セットユニオン 交差点を設定 対称集合の差または排他的論理和 差または減算を設定 アルゴリズム Begin Declare set vector v and iterator st. Initialize st = set_difference (set1, set1 + n,