Programming/Algorithm

[STL] C/C++ SET 각종 사용법(내림차순, 원소 개수, 원소 찾기, 원소 삭제, 초기화, 구조체 정렬)

DevMonster 2022. 10. 18. 00:49

이진 트리를 사용해 자료를 정렬하는 STL 알고리즘을 정리한다.

코딩 테스트에서 많이 쓰이는 사용법이다.

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
#include <iostream>
#include <string>
#include <set>
#define F(i,n) for(register int i = 1; i <= n; i++)
 
using namespace std;
 
int main(void)
{
    set<int> s1;
 
    cout << "#1. 기본 사용\n";
    F(i, 3) s1.insert(i);
    s1.insert(3); // 중복은 무시
    for (auto i : s1) cout << i << " ";
 
    cout << "\n\n#2. 내림 차순\n";
    set<int, greater<int>> s2;
    F(i, 3) s2.insert(i);
    for (auto i : s2) cout << i << " ";
 
    cout << "\n\n#3. 원소 개수\n";
    cout << s2.size()<<endl;
 
    printf("\n#4. 원소 찾기\n"); // find는 set::iterator return, count는 int 반환
    printf("1->%s 5->%s\n", s2.find(1)!=s2.end()?"찾음":"못찾음", s2.find(5)!=s2.end()?"찾음":"못찾음");
    printf("1->%s 5->%s\n", s2.count(1) ? "찾음" : "못찾음", s2.count(5) ? "찾음" : "못찾음");
 
    cout << "\n#5. 원소 삭제\n";
    s2.erase(1);
    s2.erase(5); // 없는 숫자는 무시
    for (auto i : s2) cout << i << " ";
 
    cout << "\n\n#6. 초기화\n";
    s2.clear();
    cout << s2.size();
 
    printf("\n\n#7. 구조체 정렬\n");
    struct INFO {
        int age;
        string name;
    } info[3];
    struct compare { bool operator() (INFO *a, INFO *b) constreturn a->age < b->age; } };
    set<INFO *, compare> s7;
    info[0= { 31"김덕배" };
    info[1= { 75"희동구" };
    info[2= { 22"홀란드" };
    INFO tmp = { 22"짭란드" }; // KEY(age) 중복은 무시
    s7.insert(&info[0]);
    s7.insert(&info[1]);
    s7.insert(&info[2]);
    //s7.insert(&tmp);
    for (auto i : s7) cout << i->name << " " << i->age<<endl;
 
    printf("\n\n#8. 구조체 역순 정렬\n");
    struct compare2 { bool operator() (INFO a, INFO b) const { return a.age > b.age; } };
    set<INFO, compare2> s8;
    for(auto i : info) s8.insert(i);
    //s8.insert(info[0]);
    //s8.insert(info[1]);
    //s8.insert(info[2]);
    for (auto i : s8) cout << i.name << " " << i.age << 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
출력결과
===========

#1. 기본 사용
1 2 3
 
#2. 내림 차순
3 2 1
 
#3. 원소 개수
3
 
#4. 원소 찾기
1->찾음 5->못찾음
1->찾음 5->못찾음
 
#5. 원소 삭제
3 2
 
#6. 초기화
0
 
#7. 구조체 정렬
홀란드 22
김덕배 31
희동구 75
 
 
#8. 구조체 역순 정렬
희동구 75
김덕배 31
홀란드 22
cs

 

728x90
반응형