티스토리 뷰

C,C++

[C++] stl. set에 관하여!

달리Dali 2016. 11. 29. 20:26

최근에 재밌는 문제들을 몇개 풀다보니 set을 많이 사용하게 됐고, 쓴 김에 정리해두려 합니다.



set Class

https://msdn.microsoft.com/en-us/library/e8wh7665.aspx


- Set은 unique한 데이터들을 저장하고 불러낼 수 있는 container class입니다. 여기서 unique하다는 것은 데이터 간 중복이 없다는 뜻입니다. 

- Set 내부에서 데이터는 자동으로 정렬됩니다. 

- Set에서의 key는 value와 같습니다. 

- Set에 저장된 값을 바로 수정할 수 없습니다. 기존 값을 지우고 새로운 값을 넣어야 합니다.

- Set에 저장된 데이터 접근은 iterator를 통해 할 수 있습니다. 


- Set은 template class라 할 수도 있습니다. Set의 기능이 데이터 타입에 독립적이기 때문입니다. 

- Set의 key와 value를 분리하고 싶다면 map을 사용하는 것이 좋습니다.

- Set의 key들이 unique하지 않기를 원하면, multimap을 사용하는 것이 좋습니다.



간단한 예제를 써봤습니다.

새로운 값 추가, 검색, 삭제하는 예제입니다 :)


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
#include <iostream>
#include <string>
#include <set>
 
using namespace std;
 
int main() {
    // Set Example: String key-value의 Set
    set<string> strSet;
    strSet.insert("Hello");     // strSet: [Hello]
    strSet.insert("I'm");       // strSet: [Hello], [I'm]
    strSet.insert("Summer");    // strSet: [Hello], [I'm], [Summer]
    strSet.insert("I'm");       // strSet: [Hello], [I'm], [Summer]    중복 X
    
    // 1. Set value에 접근
    for(auto iter = strSet.begin(); iter != strSet.end(); iter++) {
        cout << *iter << " ";   // iter는 해당 원소의 pointer를 가져온다
    }
    cout << endl;               // 출력 결과: Hello I'm Summer
    
    
    // 2. 원소 find / erase
    set<string>::iterator iter = strSet.find("I'm");
    if(iter == strSet.end()) {
        cout << "Cannot find it" << endl;
    } else {
        cout << "Find it!" << endl;
        strSet.erase(iter);     // 일치하는 Value가 있으면 지우라고 해봅니다.
    }
    
    // 3. 다시 출력!
    for(auto iter = strSet.begin(); iter != strSet.end(); iter++) {
        cout << *iter << " ";
    }
    cout << endl;               // 출력 결과: Hello Summer
 
    return 0;
}
 
cs



msdn set 설명을 보시면 더욱 많은 함수 설명이 잘 되어있습니다.  짱! 


오늘도 set에 대한 포스팅을 하다가 auto와 범위기반 for문에 대해 새로 알게되었습니다.

하나를 찾으면 다른 궁금한게 또 생기고, 이거 뭔가.. 한 노드에 접근하면 자동으로 다음에 연결된 노드가 생기는 리스트같습니다. 아니 그래프인가봅니다. 


그럼 안녕!




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

[C/C++]동적할당(malloc/new) 실패 시 return value  (0) 2016.11.24
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/09   »
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
글 보관함