C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C ++ STL(3)でのsetとunordered_set


この記事では、C ++ STLで設定されているものとunordered_setを理解し、それらの違いについて理解しましょう。

何が設定されていますか?

セット Key型の一意のオブジェクトのソートされたセットを含む連想コンテナです。各要素は1回だけ発生する可能性があるため、重複は許可されません。ユーザーは要素を任意の順序で挿入してセットを作成できます。セットは並べ替えられたデータをユーザーに返します。つまり、セットにはユーザーから抽出されたデータを並べ替えるための定義が含まれています。

セットを使用できる主な理由は

  • 並べ替えられたデータの場合 必須

  • 重複する値が必要ない場合は、一意のデータのみが必要です

  • 二分探索木を使用する場合 ハッシュテーブルの代わりに。

  • log(n)の複雑さがかかるため、検索時間に問題がない場合 検索中

入力

set = {2, 1, 5, 6, 9, 3, 2}

出力

1, 2, 3, 5, 6, 9

−値はランダムな順序で挿入されますが、セットごとに並べ替えられ、重複する値もセットから削除されます。

#include <iostream>
#include <set>
using namespace std;
int main(){
   //creating an array
   int arr[] = {2, 1, 5, 6, 9, 3, 2};
   int size = sizeof(arr)/ sizeof(arr[0]);
   //declaring a set
   set<int> SET;
   //inserting elements from an array to set using insert()
   for(int i = 0; i<size; i++){
      SET.insert(arr[i]);
   }
   set<int>::iterator it;
   cout<<"Values in set are: ";
   for(it = SET.begin(); it != SET.end(); it++){
      cout <<*it<<" ";
   }
}

出力

上記のコードの出力は-

になります
Values in set are: 1 2 3 5 6 9

unordered_setとは何ですか?

unordered_set ランダムに挿入された順序付けされていないデータセットを含む連想コンテナです。各要素は1回だけ発生する可能性があるため、重複は許可されません。ユーザーは要素を任意の順序で挿入することで順序付けされていないセットを作成でき、順序付けされていないセットは任意の順序でデータを返します。つまり、順序付けされていない形式です。

順序付けされていないセットを使用できる主な理由は

  • 並べ替えられたデータが不要な場合は、データが順序付けられていない形式で利用できることを意味します

  • 重複する値が必要ない場合は、一意のデータのみが必要です

  • 二分探索木の代わりにハッシュテーブルを使用したい場合。

  • 平均的な場合はO(1)、最悪の場合はO(n)を使用するため、より高速な検索が必要な場合

入力

set = {2, 1, 5, 6, 9, 3, 2}

出力

3, 9, 6, 5, 2

#include <iostream>
#include <unordered_set>
using namespace std;
int main (){
   int arr[] = { 2, 1, 5, 6, 9, 3, 2 };
   int size = sizeof (arr) / sizeof (arr[0]);
   unordered_set < int >U_SET;
   //inserting elements from an array to an unordered_set using insert()
   for (int i = 0; i < size; i++){
      U_SET.insert (arr[i]);
   }
   unordered_set < int >::iterator it;
   cout << "Values in unordred set are: ";
   for (it = U_SET.begin (); it != U_SET.end (); it++){
      cout << *it << " ";
   }
}

出力

上記のコードの出力は-

になります
Values in unordered set are: 3 6 5 9 2 1

  1. STLにSet_Intersectionを実装するC++プログラム

    2つのセットの共通部分は、両方のセットに共通する要素によってのみ形成されます。関数によってコピーされる要素は、常に同じ順序で最初のセットから取得されます。両方のセットの要素はすでに注文されている必要があります。 一般的な集合演算は-です セットユニオン 交差点を設定 対称集合の差または排他的論理和 差または減算を設定 アルゴリズム Begin    Declare set vector v and iterator st.    Initialize st = set_intersection (set1, set1 + n, set2, s

  2. STLにSet_Differenceを実装するC++プログラム

    2つのセットの違いは、2番目のセットではなく、最初のセットに存在する要素によってのみ形成されます。関数によってコピーされる要素は、常に同じ順序で最初のセットから取得されます。両方のセットの要素はすでに注文されている必要があります。 一般的な集合演算は-です セットユニオン 交差点を設定 対称集合の差または排他的論理和 差または減算を設定 アルゴリズム Begin    Declare set vector v and iterator st.    Initialize st = set_difference (set1, set1 + n,