logo

C++ 표준 템플릿 라이브러리(STL)에 설정

세트는 요소의 값으로 식별되므로 각 요소가 고유해야 하는 연관 컨테이너 유형입니다. 값은 특정 정렬 순서(예: 오름차순 또는 내림차순)로 저장됩니다.

그만큼 표준::설정 클래스는 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개는 무엇인가요?

속성

  1. 저장 순서 – 세트는 요소를 다음 위치에 저장합니다. 정렬됨 주문하다.
  2. 가치 특성 – 집합의 모든 요소는 고유한 값 .
  3. 가치관 자연 – 요소의 값은 세트에 추가된 후에는 수정할 수 없지만 해당 요소의 수정된 값을 제거한 다음 추가하는 것은 가능합니다. 따라서 값은 ~이다 불변 .
  4. 검색 기술 – 세트는 다음을 따릅니다. 이진 검색 트리 구현.
  5. 정리 순서 – 세트의 값은 다음과 같습니다. 색인이 생성되지 않은 .

메모: 정렬되지 않은(임의) 순서로 요소를 저장하려면, 무순_세트() 사용할 수 있습니다.

세트와 관련된 일부 기본 기능

  • 시작하다() – 집합의 첫 번째 요소에 대한 반복자를 반환합니다.
  • 끝() – 집합의 마지막 요소 뒤에 오는 이론적인 요소에 대한 반복자를 반환합니다.
  • 크기() – 집합의 요소 수를 반환합니다.
  • 최대_크기() – 세트가 보유할 수 있는 최대 요소 수를 반환합니다.
  • 비어 있는() – 집합이 비어 있는지 여부를 반환합니다.

세트에서 다양한 작업을 수행하는 데 소요되는 시간 복잡도는 다음과 같습니다.

  • 요소 삽입 – 오(로그 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;

자세한 내용은 다음 기사를 참조하세요. 세트 대 순서가 지정되지 않은 세트 .