세트는 요소의 값으로 식별되므로 각 요소가 고유해야 하는 연관 컨테이너 유형입니다. 값은 특정 정렬 순서(예: 오름차순 또는 내림차순)로 저장됩니다.
그만큼 표준::설정 클래스는 C++ 표준 템플릿 라이브러리(STL)의 일부이며 클래스 내부에 정의됩니다. 헤더 파일.
통사론:
버킷 정렬
std::set set_name;>
데이터 형식: Set은 값에 따라 모든 데이터 유형을 취할 수 있습니다. int, char, float 등
예:
set val; // defining an empty set set val = {6, 10, 5, 1}; // defining a set with values> 프로그램:
C++
// C++ Program to Demonstrate> // the basic working of STL> #include> #include> int> main()> {> >std::set<>char>>;> >a.insert(>'G'>);> >a.insert(>'F'>);> >a.insert(>'G'>);> >for> (>auto>& str : a) {> >std::cout << str <<>' '>;> >}> >std::cout <<>'
'>;> >return> 0;> }> |
>
>산출
F G>
시간 복잡도: O(N) // N은 집합의 크기입니다.
보조 공간: 에)
F와 G만 인쇄한 이유는 집합이 여러 개의 동일한 값을 취하지 않고 고유한 값만 허용하기 때문입니다. 우리는 사용할 수 있습니다 다중 세트 여러 개의 동일한 값을 저장하려는 경우.
내림차순으로 정렬된 세트
기본적으로 std::set은 오름차순으로 정렬됩니다. 그러나 다음 구문을 사용하여 정렬 순서를 변경할 수 있습니다.
std::set set_name;>
예:
C++
파이썬의 크기
// C++ program to demonstrate the creation of descending> // order set container> #include> #include> using> namespace> std;> int> main()> {> >set<>int>, greater<>int>>> s1;> >s1.insert(10);> >s1.insert(5);> >s1.insert(12);> >s1.insert(4);> >for> (>auto> i : s1) {> >cout << i <<>' '>;> >}> >return> 0;> }> |
>
>산출
12 10 5 4>
시간 복잡도: O(N) // N은 집합의 크기입니다.
보조 공간: 에)
메모: 우리는 사용자 정의 순서 정렬을 설정하기 위해 더 큰 비교기 대신 어떤 비교기를 사용할 수 있습니다.
60개 중 10개는 무엇인가요?
속성
- 저장 순서 – 세트는 요소를 다음 위치에 저장합니다. 정렬됨 주문하다.
- 가치 특성 – 집합의 모든 요소는 고유한 값 .
- 가치관 자연 – 요소의 값은 세트에 추가된 후에는 수정할 수 없지만 해당 요소의 수정된 값을 제거한 다음 추가하는 것은 가능합니다. 따라서 값은 ~이다 불변 .
- 검색 기술 – 세트는 다음을 따릅니다. 이진 검색 트리 구현.
- 정리 순서 – 세트의 값은 다음과 같습니다. 색인이 생성되지 않은 .
메모: 정렬되지 않은(임의) 순서로 요소를 저장하려면, 무순_세트() 사용할 수 있습니다.
세트와 관련된 일부 기본 기능
- 시작하다() – 집합의 첫 번째 요소에 대한 반복자를 반환합니다.
- 끝() – 집합의 마지막 요소 뒤에 오는 이론적인 요소에 대한 반복자를 반환합니다.
- 크기() – 집합의 요소 수를 반환합니다.
- 최대_크기() – 세트가 보유할 수 있는 최대 요소 수를 반환합니다.
- 비어 있는() – 집합이 비어 있는지 여부를 반환합니다.
세트에서 다양한 작업을 수행하는 데 소요되는 시간 복잡도는 다음과 같습니다.
- 요소 삽입 – 오(로그 N)
- 요소 삭제 – 오(로그 N)
CPP
// C++ program to demonstrate various functions of> // STL> #include> #include> #include> using> namespace> std;> int> main()> {> >// empty set container> >set<>int>, greater<>int>>> s1;> >// insert elements in random order> >s1.insert(40);> >s1.insert(30);> >s1.insert(60);> >s1.insert(20);> >s1.insert(50);> >// only one 50 will be added to the set> >s1.insert(50);> >s1.insert(10);> >// printing set s1> >set<>int>, greater<>int>>>::반복자 itr;> >cout <<>'
The set s1 is :
'>;> >for> (itr = s1.begin(); itr != s1.end(); itr++) {> >cout << *itr <<>' '>;> >}> >cout << endl;> >// assigning the elements from s1 to s2> >set<>int>>s2(s1.begin(), s1.end());> >// print all elements of the set s2> >cout <<>'
The set s2 after assign from s1 is :
'>;> >for> (itr = s2.begin(); itr != s2.end(); itr++) {> >cout << *itr <<>' '>;> >}> >cout << endl;> >// remove all elements up to 30 in s2> >cout <<>'
s2 after removal of elements less than 30 '> >':
'>;> >s2.erase(s2.begin(), s2.find(30));> >for> (itr = s2.begin(); itr != s2.end(); itr++) {> >cout << *itr <<>' '>;> >}> >// remove element with value 50 in s2> >int> num;> >num = s2.erase(50);> >cout <<>'
s2.erase(50) : '>;> >cout << num <<>' removed
'>;> >for> (itr = s2.begin(); itr != s2.end(); itr++) {> >cout << *itr <<>' '>;> >}> >cout << endl;> >// lower bound and upper bound for set s1> >cout <<>'s1.lower_bound(40) : '> ><< *s1.lower_bound(40) << endl;> >cout <<>'s1.upper_bound(40) : '> ><< *s1.upper_bound(40) << endl;> >// lower bound and upper bound for set s2> >cout <<>'s2.lower_bound(40) : '> ><< *s2.lower_bound(40) << endl;> >cout <<>'s2.upper_bound(40) : '> ><< *s2.upper_bound(40) << endl;> >return> 0;> }> |
>
>
npm 캐시 지우기산출
The set s1 is : 60 50 40 30 20 10 The set s2 after assign from s1 is : 10 20 30 40 50 60 s2 after removal of elements less than 30 : 30 40 50 60 s2.erase(50) : 1 removed 30 40 60 s1.lower_bound(40) : 40 s1.upper_bound(40) : 30 s2.lower_bound(40) : 40 s2.upper_bound(40) : 60>
C++ STL에서 Set의 다른 기능
| 기능 | 설명 |
|---|---|
| 시작하다() | 집합의 첫 번째 요소에 대한 반복자를 반환합니다. |
| 끝() | 집합의 마지막 요소 뒤에 오는 이론적인 요소에 대한 반복자를 반환합니다. |
| rbegin() | 컨테이너의 마지막 요소를 가리키는 역방향 반복자를 반환합니다. |
| 세우다() | 집합 컨테이너의 첫 번째 요소 바로 앞에 있는 이론적인 요소를 가리키는 역방향 반복기를 반환합니다. |
| 크르비긴() | 컨테이너의 마지막 요소를 가리키는 상수 반복자를 반환합니다. |
| 신조() | 컨테이너의 첫 번째 요소 바로 앞 위치를 가리키는 상수 반복자를 반환합니다. |
| cbegin() | 컨테이너의 첫 번째 요소를 가리키는 상수 반복자를 반환합니다. |
| 몇() | 컨테이너의 마지막 요소 다음 위치를 가리키는 상수 반복자를 반환합니다. |
| 크기() | 세트의 요소 수를 반환합니다. |
| 최대_크기() | 세트가 보유할 수 있는 최대 요소 수를 반환합니다. |
| 비어 있는() | 세트가 비어 있는지 여부를 반환합니다. |
| 삽입(const g) | 세트에 새 요소 'g'를 추가합니다. |
| 반복자 삽입(반복자 위치, const g) | 반복자가 가리키는 위치에 새 요소 'g'를 추가합니다. |
| 지우기(반복자 위치) | 반복자가 가리키는 위치의 요소를 제거합니다. |
| 지우기(const g) | 세트에서 값 'g'를 제거합니다. |
| 분명한() | 세트에서 모든 요소를 제거합니다. |
| key_comp() / value_comp() | 집합의 요소가 정렬되는 방식을 결정하는 개체를 반환합니다(기본적으로 '<'). |
| 찾기(const g) | 집합의 요소 'g'가 발견되면 반복자를 반환하고, 그렇지 않으면 끝까지 반복자를 반환합니다. |
| 개수(const g) | 'g' 요소가 집합에 존재하는지 여부에 따라 1 또는 0을 반환합니다. |
| 하한값(const g) | 'g'와 동일한 첫 번째 요소에 대한 반복자를 반환합니다. 그렇지 않으면 세트의 요소 'g' 앞에는 절대 가지 않습니다. |
| 상한(const g) | 집합에서 'g' 요소 뒤에 올 첫 번째 요소에 대한 반복자를 반환합니다. |
| 동일_범위() | 이 함수는 쌍의 반복자를 반환합니다. (key_comp). 쌍은 k와 동일한 키를 가진 컨테이너의 모든 요소를 포함하는 범위를 나타냅니다. |
| 자리() | 이 함수는 삽입할 요소가 고유하고 세트에 아직 존재하지 않는 경우에만 세트 컨테이너에 새 요소를 삽입하는 데 사용됩니다. |
| emplace_hint() | 삽입이 완료된 위치를 가리키는 반복자를 반환합니다. 매개변수에 전달된 요소가 이미 존재하는 경우 기존 요소가 있는 위치를 가리키는 반복자를 반환합니다. |
| 교환() | 이 기능은 두 세트의 콘텐츠를 교환하는 데 사용됩니다. 단, 크기는 다를 수 있지만 세트는 동일한 유형이어야 합니다. |
| 연산자= | '='는 집합을 다른 집합으로 복사(또는 이동)하는 C++ STL의 연산자이고 set::operator=는 해당 연산자 함수입니다. |
| get_allocator() | 세트와 연관된 할당자 객체의 복사본을 반환합니다. |
세트와 순서가 지정되지 않은 세트의 차이점
| 세트 | 순서가 지정되지 않은 세트 |
|---|---|
| Set은 정렬된 순서로 요소를 저장합니다. | 정렬되지 않은 세트는 요소를 정렬되지 않은 순서로 저장합니다. |
| 상점 설정/고유 요소만 획득 | 순서가 지정되지 않은 집합은 고유한 값만 저장/획득합니다. |
| 세트는 구현을 위해 이진 검색 트리를 사용합니다. | 순서가 지정되지 않은 집합은 구현을 위해 해시 테이블을 사용합니다. |
| 시작 및 종료 반복자를 제공하여 두 개 이상의 요소를 지울 수 있습니다. | 반복자 위치가 주어진 요소를 지울 수 있습니다 |
| Set_Name을 설정합니다. | unordered_set UnorderedSet_Name; |
자세한 내용은 다음 기사를 참조하세요. 세트 대 순서가 지정되지 않은 세트 .