연관 컨테이너들의 공통적인 특징

  • 노드 기반 컨테이너
  • 균형 이진트리로 구현
  • 멤버 변수, 생성자 등이 거의 같음

#include <set>

  • key라 불리는 원소들의 집합 (원소=key)
  • key값은 중복이 허용 X
  • 원소가 삽입되면, 원소는 자동으로 오름차순으로 정렬
  • 그림처럼 중위 순화를 통해서 출력

 

 

 

 

 

@ set <int> s  선언

@ set <int> s(pred) pred를 통해 정렬 기준

@ set <int> s1(s2) 복사 생성자를 이용

 

@ s.begin() 맨 첫 번째 원소를 가리킴

@ s.end() 맨 마지막 원소의 다음을 가리킴

@ s.rbeing() reverse begin의 첫 번째

@ s.rend()    reverse end 가리키는 곳의 다음

 

@ s.size() 원소의 갯수 반환

@ s.max_size() 최대 사이즈( 남은 메모리 크기 반환)

@ s.clear()  모든 원소를 제거

@ s.count(k) 원소 k의 개수를 반환, set에서는 중복이 불가하므로 0 또는 1만 존재

@ s.empty() 비어있는지 여부 확인

@ s.insert(k) 원소 k를 삽입하는 동시에 자동으로 정렬

@ s.insert(iter, k) iter가 가리키는 위치에 원소 k 삽입

@ s.erase(iter) iter이 가리키는 원소 삭제

@ s.erase(start, end) iteratorstartend 사이 값을 삭제

 

@ s.find(k) 원소 k를 가리키는 반복자를 반환, 만약 k가 없다면 s.end()와 같은 반복자 반환

@ s.lower_bound(k) 원소 k가 시작하는 구간의 반복자 반환, 원소 중에 k가 있으면 k 반환

  ex) 10, 20, 30 , 40에서 k가 11이면 lower 값은 20이고 k가 19이면 lower은 20이다

@ s.upper_bound(k) 원소 k가 끝나는 구간의 반복자 반환, 원소 중에 k가 존재하면 k 다음 원소 반환

  ex) 10, 20 , 30 , 40에서 k가 20 인 경우 upper 값은 30, k값이 30인 경우 upper40 위치 반환

@ s.equal_range(k) 원소 k가 시작하는 구간과 끝나는 구간의 반복자 pair 객체를 반환,-반복자

  ex) 10, 20, 33, 40 ,50에서 k가 33인 경우 equal 값은 first 값은 33 second 40 값 반환

@ a.swap(b) a에 들어있는 모든 원소와 b에 들어 있는 모든 원소를 바꾸어준다

C++코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#include<iostream>
#include<set>
using namespace std;
int main(void)
{
    pair<set<int>::iterator,bool> pr;
    set<int> s;
    pr=s.insert(10);
    if(pr.second==true)
    {
        cout<<"이미 존재"<<endl;
    }
    else
    {
        cout<<"없 음"<<endl;
         
     } 
     s.insert(20);
     s.insert(5);
     set<int> :: iterator iter;
     for(iter=s.begin();iter!=s.end();iter++)
     {
         cout<<*iter<<' ';
      } 
      cout<<endl;
      pr=s.insert(20);
      if(pr.second==true)
      {
          cout<<*pr.first<<"삽입 성공"<<endl
      }
      else
      {
          cout<<*pr.first<<"이미 존재 합니다"<<endl
      }
      for(iter=s.begin();iter!=s.end();iter++cout<<*iter<<' ';
      cout<<endl;
      
      s.insert(pr.first,40);
       for(iter=s.begin();iter!=s.end();iter++cout<<*iter<<' ';
      cout<<endl;
      
      set<int> s2;
      s2.insert(10);
      s2.insert(20);
      s2.insert(50);
      s2.insert(30);
      s2.insert(40);
      set<int> ::iterator iter1;
      cout<<"s2"<<endl;
      for(iter1=s2.begin();iter1!=s2.end();iter1++)
      {
          cout<<*iter1<<' ';
          
      }
      iter1=s2.find(60);
      cout<<endl;
      if(iter1!=s.end())
      {
          cout<<*iter1<<"존재 합니다"<<endl;
      }
      else
      {
          cout<<*iter1<<"존지 하지 앖는다"<<endl
      }
      cout<<endl;
    return 0;
    
}
cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include<iostream>
#include<set>
using namespace std;
int main(void)
{
    set<int> s;
    s.insert(10);
    s.insert(20);
    s.insert(30);
    s.insert(40);
    s.insert(50);
    s.insert(44);
    
    set<int> :: iterator iter_upper;
    set<int> :: iterator iter_lower;
    iter_lower=s.lower_bound(44);
    
    iter_upper=s.upper_bound(30);
    cout<<*iter_lower<<endl;
    cout<<*iter_upper<<endl;
    
    pair<set<int>::iterator,set<int> ::iterator> iter_pair;
    
    iter_pair=s.equal_range(44);
    cout<<*iter_pair.first<<endl;
    cout<<*iter_pair.second<<endl;
    
    return 0;
    
}
cs

'C++' 카테고리의 다른 글

List  (0) 2019.11.04
연관 컨테이너 (multiset)  (0) 2019.11.02
Queue, Stack  (0) 2019.11.01
String  (0) 2019.11.01
Algorithm  (0) 2019.11.01

+ Recent posts