- 셋(set)은 연관 컨테이너 중 하나로서, 찾고자 하는 키(key)가 존재하는 지 확인하기 위해 사용합니다. set은 기본적으로 key의 중복을 허용하지 않습니다.
- set은 이진 트리 구조로 이루어져 있으며, 이를 통하여 key들을 정렬할 수 있다는 점이 특징입니다. set에 key들이 정렬될 때에는 기본적으로 오름차순으로 정렬됩니다.
- set 컨테이너를 사용하기 위해서는 아래와 같이 <set> 헤더를 포함해야 하고, 선언할 때는 컨테이너에 들어갈 원소의 타입을 명시해주어야 합니다. 사용자의 편의에 따라서 정렬 방식을 선언할 때 정할 수도 있습니다.
#include <set>
std::set<type> s1; // std namespace 사용 시 std 생략가능
std::set<type, greater<type> > s2; // 내림차순으로 정렬한 set
std::set<type, compare> s3; // 구조체 compare를 기준으로 정렬한 set
- 또한 다른 컨테이너들처럼 set 생성 시 초기에 저장될 값을 정할 수 있습니다.
set<int> s1 = {1, 2, 3, 4, 5}; // 편의상 std 생략
set<int> s2{1, 2, 3, 4, 5}; // 어느 방식으로 초기화해도 무방함
<set의 멤버 함수>
-std::set<int> s; 와 int key; 로 선언되어 있다고 가정합니다-
1) 삽입과 삭제
s.insert(key); |
$\to$ set에 원소 key를 삽입합니다. 이 때 삽입된 원소는 정렬 방식에 따라 자동적으로 정렬되어 저장됩니다.
s.erase(key) |
$\to$ set에 원소 key가 존재하면 삭제합니다.
s.clear(); |
$\to$ set의 모든 원소를 초기화합니다.
2) 원소 참조
s.begin(); |
s.end(); |
s.rbegin(); |
s.rend(); |
$\to$ s.begin()은 set의 첫 번째 원소의 반복자를 리턴하고, s.end()는 set의 마지막 원소의 다음 원소의 반복자를 리턴합니다.
$\to$ s.rbegin()과 s.rend()는 위의 begin()과 end()랑 반대로(reverse) 동작합니다.
$\to$ 다르게 말하면, s.rbegin() == s.end() - 1, s.rend() == s.begin() - 1라고 할 수 있습니다.
s.find(key); |
$\to$ 만약 key가 set에 있을 경우 원소 key의 반복자를 리턴하고, 그렇지 않을 경우 end()를 리턴합니다.
s.upper_bound(key); |
s.lower_bound(key); |
$\to$ s.upper_bound(key)는 key값이 저장된 원소의 위치 다음의 반복자를 리턴하고, s.lower_bound(key)는 key값이 저장된 원소의 반복자를 리턴합니다.
s.key_comp(); |
$\to$ set의 기준이 되는 정렬 방식을 리턴합니다. 지금과 같은 경우에는 less<int> 를 리턴합니다.
3) 사이즈 관련
s.size(); |
$\to$ set에 저장된 원소의 개수를 리턴합니다.
s.empty(); |
$\to$ set이 비어있는지 확인합니다. 비어있으면 1, 그렇지 않으면 0을 리턴합니다.
'프로그래밍 언어 > C++ STL' 카테고리의 다른 글
C++ STL queue (0) | 2023.02.21 |
---|---|
C++ STL stack (0) | 2023.01.24 |
C++ STL map (0) | 2023.01.04 |
C++ STL vector (0) | 2022.12.04 |
C++ STL 개요 (0) | 2022.11.25 |
댓글