728x90

목차.

  1. 개요
  2. set의 형태
  3. set의 특징
  4. set의 기능
  5. 결론

 

개요

 

C++에서 'set'은 데이터를 저장하는 데 사용되는 컨테이너 중 하나로, 중복된 값을 허용하지 않는 정렬된 컨테이너입니다.

'set'은 특히 고유한 값의 컬렉션을 다룰 때 유용하며, STL(Standard Template Library)에서 제공하는 중요한 데이터 구조 중 하나입니다.

이 글에서는 C++에서 'set' 컨테이너를 소개하고 사용하는 방법에 대해 설명하겠습니다.

 

set의 형태

 

set 컨테이너를 사용하기 위해서 <set>헤더를 추가해줘야 합니다.

 

set<데이터 타입> 변수명

- set<int> mySet;

다음과 같이 선언 시 default로 size는 0이 된다.

 

set<데이터 타입> 변수명 = {요소}

- set<int> mySet= {1,2,3,4,5};

선언과 동시에 초기화를 하는 모습이다.

 

set<데이터 타입> 변수명(변수명)

- set<int> mySet(yourSet);

 

set의 특징

 

  • 표준 라이브러리(STL)에서 제공하는 컨테이너
  • 노드 기반으로 균형 이진 탐색 트리(binary search tree)
  • 정렬된 원소들을 저장
  • 중복을 허용하지 않음
  • 기본적으로 오름차순으로 정렬
  • 이진 탐색 트리기반으로 삽입, 삭제, 검색 연산이 모두 O(log n)의 시간복잡도

 

중복 값 제거

- set 컨테이너에 1, 2, 4를 각 2번씩 할당하면 

중복된-값-제거
중복된 값 제거

중복된 값이 제거되고 1, 2, 4만 저장이 됩니다.

 

오름차순 정렬

- set 컨테이너에 5, 3, 6, 2, 1을 할당하면

오름차순으로-정렬된-모습
오름차순으로 정렬

값이 자동으로 오름차순 정렬되어 저장이 됩니다.

 

set의 기능

 

기능을 설명하기 앞서 반복자란?

 

반복자(iterator)

- 형태 : set<데이터 타입>::iterator 변수명;

- set 컨테이너에서 사용되는 반복자 타입

- 반복자는 컨테이너의 원소들에 순차적으로 접근하고 조작하기 위한 방법을 제공하는 객체

 

begin() / end() : 반복자(iterator)의 시작과 끝을 반환

    set<int> mySet= { 5, 2, 10, 7, 15 };
    // 첫번째 원소 출력
    set<int>::iterator it_begin = mySet.begin();
    cout << "첫번째 원소는: " << *it_begin << endl;

    // 마지막 원소 출력, end()는 마지막 원소의 다음위치를 반환
    set<int>::iterator it_end = mySet.end();
    cout << "마지막 원소는: " << *(--it_end) << endl;

    // 모든 원소 출력
    for (set<int>::iterator it = mySet.begin(); it != mySet.end(); ++it)
    {
        cout << *it << " ";
    }

 

begin함수와-end함수-사용
begin함수와 end함수 사용

 

find() : 특정 원소를 검색, 원소를 찾지 못하면 end() 반환, 기본적으로 반복자를 반환

set<int>::iterator it = mySet.find(7);
    if (it != mySet.end()) {
        cout << "7발견"<< endl;
    } else {
        cout << "7미발견" << endl;
    }

 

insert() : 원소를 삽입

set<int> mySet = {5, 2, 10, 7, 15};

set<int>::iterator it = mySet.find(7);
    if (it != mySet.end()) {
        mySet.insert(it, 8);
    }

 

erase() : 특정 원소 또는 원소의 범위를 삭제

set<int> mySet = { 5, 2, 10, 7, 15 };

set<int>::iterator it_begin = mySet.find(2);
set<int>::iterator it_end = mySet.find(7);

 mySet.erase(it_begin, it_end);

 

clear() : 모든 원소를 삭제

 

count() : 특정 원소가 set에 있는지 개수를 반환

 

empty() : set이 비어있는지 여부를 확인

 

size() : set에 저장된 원소의 개수 반환

 

결론

 

set 컨테이너는 c++에서 중복을 허용하지 않는 고유한 값의 컬렉션을 관리하는 데 유용한 데이터 구조입니다.

값의 자동 정렬과 빠른 검색을 제공하며, 데이터 삽입 및 삭제도 효율적으로 처리할 수 있습니다.

이번 글에서 set의 개념과 특징, 그리고 각종 기능들에 대해서 알아봤습니다.

728x90

+ Recent posts