연관 컨테이너들의 공통적인 특징
- 노드 기반 컨테이너
- 균형 이진트리로 구현
- 멤버 변수, 생성자 등이 거의 같음
#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) iterator인 start와 end 사이 값을 삭제
@ 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 |