Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++ STL(3)에서 set 대 unordered_set


이 기사에서는 C++ STL에서 set과 unordered_set이 무엇인지 이해하고 그 차이점에 대해 알아보겠습니다.

무엇이 설정되어 있습니까?

세트 Key 유형의 정렬된 고유 개체 집합을 포함하는 연관 컨테이너입니다. 각 요소는 한 번만 발생할 수 있으므로 중복이 허용되지 않습니다. 사용자는 요소를 임의의 순서로 삽입하여 집합을 만들 수 있으며 집합은 사용자에게 정렬된 데이터를 반환합니다. 이는 집합에 사용자로부터 추상화된 데이터를 정렬하기 위한 정의가 포함되어 있음을 의미합니다.

set을 사용할 수 있는 주요 이유는 -

  • 정렬된 데이터일 때 필수

  • 중복 값이 ​​필요하지 않은 경우 고유한 데이터만 필요합니다.

  • 이진 검색 트리를 사용하려는 경우 해시 테이블 대신.

  • 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이란 무엇입니까?

정렬되지 않은_세트 무작위로 삽입된 정렬되지 않은 데이터 세트를 포함하는 연관 컨테이너입니다. 각 요소는 한 번만 발생할 수 있으므로 중복이 허용되지 않습니다. 사용자는 요소를 순서에 관계없이 삽입하여 정렬되지 않은 집합을 만들 수 있으며 정렬되지 않은 집합은 순서에 관계없이 데이터를 반환합니다. 즉, 정렬되지 않은 형식입니다.

순서가 없는 집합을 사용할 수 있는 주된 이유는 -

  • 정렬된 데이터가 필요하지 않으면 데이터를 정렬되지 않은 형식으로 사용할 수 있음을 의미합니다.

  • 중복 값이 ​​필요하지 않은 경우 고유한 데이터만 필요합니다.

  • Binary Search Tree 대신 Hash Table을 사용하고 싶을 때.

  • 평균의 경우 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