C++ STL set
본문 바로가기
프로그래밍 언어/C++ STL

C++ STL set

by Celestial_ 2022. 12. 27.
반응형
  • 셋(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

댓글