728x90
728x90

set(집합)

 

특징

  • 연관 컨테이너(Associative Container) 중 하나이다.
    • 연관 컨테이너에는 set, multiset, map, multimap 이 있다.
  • 특정 순서에 따라 고유한 요소를 저장하는 컨테이너이다.
    • 기본적으로 요소들은 오름차순(less)으로 정렬되어 삽입된다.
    • 중복되는 요소는 없고, 오로지 희소한(Unique) 값만 저장된다.
  • map과 거의 동일하지만, setmap과 다르게 키(Key)와 값(Value)이 같다고 생각하면 된다.
    • 키(Key)라 불리는 요소들의 집합으로 이루어진 컨테이너라고 생각하면 된다.
  • 노드 기반 컨테이너이며, 균형 이진 트리로 구현되어 있다.

set의 구조

  • 이터레이터(Iterator)는 자동으로 중위 순회(Inordered Traversal)를 통하여 순서대로 키(Key)를 출력한다.

 

헤더 파일

  • 집합(set)을 사용하려면 다음의 헤더 파일을 불러와야 한다.
#include <set>

 

멤버 함수

 

사용 방법

 

[C++] 맵(Map)

맵(Map) 특징 연관 컨테이너(Associative Container) 중 하나이다. 연관 컨테이너에는 set, multiset, map, multimap 이 있다. string : int 형태로 값을 할당해야 할 때 맵을 사용한다. 키(Key)와 값(Value) 형태로 이루

dev-astra.tistory.com

 

객체 생성

  • 다음과 같이 객체를 생성한다.
set<[data_type]> [name]
#include <iostream>
#include <set>
using namespace std;

set<int> s1 {
    1, 2, 3, 4, 6, 5, 7, 8, 10, 9
};
set<pair<string, int>> s2;    // pair 객체를 인자로 넣어줄 수 있다.

int main() {    
	for (auto i : s1) {
        cout << i << " ";
    }
    
    return 0;
}
1 2 3 4 5 6 7 8 9 10

 

첨자 연산자([ ])의 사용 불가능

  • map과는 다르게 첨자([ ]) 연산자를 사용해서 원소를 추가 또는 수정이 불가능하다.
s[0] = 3;    // 사용 불가능

 

요소 삽입

  • 다음과 같이 insert() 함수를 사용하여 요소를 삽입할 수 있다.
    • 하지만, 중복되는 요소를 삽입할 수 없다.
s.insert(11);

 

사용 예

#include <iostream>
#include <set>
using namespace std;

set<int> s1 {
    1, 2, 3, 4, 6, 5, 7, 8, 10, 9
};
set<pair<string, int>> s2;

int main() {    
	for (auto i : s1) {
        cout << i << " ";
    }
    
    cout << endl;
    
    // 요소 삽입
    s2.insert({ "test", 1 });
    s2.insert({ "test", 2 });
    s2.insert({ "test", 1 });
    s2.insert({ "test", 3 });
    
    for (auto i : s2) {
        cout << i.first << " " << i.second << '\n';
    }
    
    // 집합의 크기 출력
    cout << s1.size() << '\n';
    cout << s2.size() << '\n';
    
    return 0;
}
1 2 3 4 5 6 7 8 9 10 
test 1
test 2
test 3
10
3

 

728x90
728x90