[C++ 자료 구조와 알고리즘] #8 자료 구조 (8) - std::set (C++ STL container)

Programming/C++ · 2023. 5. 27. 00:12

안녕하세요. C++을 다루기 위한 기본 적인 자료 구조와 코딩 테스트 등에서 응용될 수 있는 알고리즘을 알아보는 시간을 가지겠습니다.

 

이번 게시물은 std::set을 간단히 설명해 보려 합니다. 

 

1) 특징

std::set은 C++ 표준 라이브러리 컨테이너(C++ STL container) 중 하나로, 중복된 값을 허용하지 않는 정렬된 집합이 필요할 때 사용할 수 있습니다. std::set은 이진 검색 트리(Binary Search Tree)를 기반으로 구현되어 있기 때문에 삽입, 삭제, 검색 등의 연산에도 빠른 성능을 보입니다.
 
이와같은 std::set에 대한 attributes와 관련 메서드 사용 예시를 알아보겠습니다.

 

2) 코딩 테스트 활용 예시

  • 중복 제거 및 정렬
    : 입력으로 주어진 데이터에서 중복된 값을 제거하고, 값을 정렬된 상태로 저장해야 할 때 해당 자료구조를 사용할 수 있습니다.
  • 검색과 데이터 존재 여부 확인
    : std::set은 이진 검색 트리를 기반으로 구현되어 있어 검색 연산에 빠른 성능을 보입니다. 따라서 해당 자료구조를 사용하여 특정 값을 찾거나 검색 여부를 확인하는 상황에 유리합니다.
  • 범위 기반 연산
    : std::set은 항상 정렬된 상태를 유지하므로, 특정 범위 내에 속하는 값을 빠르게 찾을 수 있습니다. 이러한 특징을 활용해 특정 범위 내에 있는 최소값, 최대값, 중간값 등을 찾는 문제에 유용합니다.

 

3) 속성 (Attributes)

std::set는 <set> 헤더를 포함해서 사용할 수 있습니다.

 

우선 다음과 같은 std::set의 주요 속성과 멤버 함수를 통해 해당 자료 구조를 활용하는 방법을 자세하게 알아보겠습니다.

 

  • insert(element)
    : set에 요소를 삽입합니다. 중복된 요소는 삽입되지 않습니다.
  • erase(element)
    : set에서 요소를 제거합니다.
  • find(element)
    : set에서 요소를 검색합니다. 해당 요소가 존재하면 해당 요소의 반복자(iterator)를 반환하고, 존재하지 않으면 set의 끝을 나타내는 반복자를 반환합니다.
  • empty()
    : set이 비어 있는지 여부를 확인합니다. 비어 있으면 true를 반환하고, 그렇지 않으면 false를 반환합니다.
  • size()
    : set에 저장된 요소의 개수를 반환합니다.

 

4) 속성 사용 예시

다음은 std::queue의 속성 사용 예시입니다.

 

  • insert(element)
    : set에 요소를 삽입합니다. 중복된 요소는 삽입되지 않습니다.
std::set<int> mySet;
mySet.insert(10);
mySet.insert(20);
mySet.insert(30);
  • erase(element)
    : set에서 요소를 제거합니다.
std::set<int> mySet;
mySet.insert(10);
mySet.insert(20);
mySet.insert(30);
mySet.erase(20);

 

  • find(element)
    : set에서 요소를 검색합니다. 해당 요소가 존재하면 해당 요소의 반복자(iterator)를 반환하고, 존재하지 않으면 set의 끝을 나타내는 반복자를 반환합니다.
std::set<int> mySet;
mySet.insert(10);
mySet.insert(20);
mySet.insert(30);
auto it = mySet.find(20);
if (it != mySet.end()) {
    // 요소가 존재하는 경우
    // it를 이용해 작업 수행
} else {
    // 요소가 존재하지 않는 경우
}
  • empty()
    : set이 비어 있는지 여부를 확인합니다. 비어 있으면 true를 반환하고, 그렇지 않으면 false를 반환합니다.
std::set<int> mySet;
if (mySet.empty()) {
    // set이 비어있는 경우
} else {
    // set에 요소가 있는 경우
}
  • size()
    : set에 저장된 요소의 개수를 반환합니다.
std::set<int> mySet;
mySet.insert(10);
mySet.insert(20);
mySet.insert(30);
int setSize = mySet.size();
반응형