안녕하세요. 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();
반응형