본문 바로가기
C++/STL

[C++/STL] std::set 사용방법, 목적 짧은 정리 - 리눅스에서 C++ 개발하기

by Warehaus 2022. 1. 27.

오늘은 C++개발을 하면서 많이 사용하는 STL 의 std::set 사용하는 방법을 알아보려고 한다.

업무환경은 Redhat 7.3 을 사용하고 있고, 포스팅을 위한 테스트환경은 Ubuntu 임을 알린다.

 

정의

 

출처 : https://www.cplusplus.com/reference/set/set/

 

Set 은 unique element (유일한 요소)를 저장하는 container 이다.

 

목적

정의 그대로 자료구조에 저장하고자 하는 데이터를 유일하게 관리하고 싶을 때 사용한다.

중복을 제거하는데 도움이 된다.

 

어떤 프로그램에서 메모리에 id를 관리하고자 한다면, std::set이 제격이다.

 

그리고 공간 복잡도 측면에서는 비 효율 적이지만, std::vector나 다른 자료구조에서 중복 된 항목들을 제거하고 싶다면, set에 한번 넣어주면 O(N)으로 중복제거가 가능하다.

 

사용방법

 

아래 코드를 복사해서 실행해 볼 수 있다.

 

#include <iostream>
#include <set>
#include <string>

using namespace std;

int main ()
{
    set<std::string> a;

    string elem1 = "a";
    string elem2 = "b";

    a.insert( elem1 );
    a.insert( elem2 );
    a.insert( elem1 );

    for ( auto& i : a ) {
        cout <<"item: "<< i << endl;
    }

    return 0;
}

 

실행결과는 다음과 같다.

 

./a.out 
item: a
item: b

 

 

 

특징

set container 의 특징으로는 저장되는 아이템이 유일하다는 점이다.

같은 항목을 여러번 저장하면 어떻게 될까?

 

위에서 작성한 코드를 다시한번 보자.

elem1 ("a") 를 2번 저장했다.

 

#include <iostream>
#include <set>
#include <string>

using namespace std;

int main ()
{
    set<std::string> a;

    string elem1 = "a";
    string elem2 = "b";

    a.insert( elem1 );
    a.insert( elem2 );
    a.insert( elem1 );

    for ( auto& i : a ) {
        cout <<"item: "<< i << endl;
    }

    return 0;
}

 

그런데 출력은? a가 한번만 나오는 것을 볼 수 있다.

 

./a.out 
item: a
item: b

 

이렇게 STL의 set container 는 중복 된 데이터를 제거해 주는, unique 한 element만 관리하는 자료구조임을 직접 실행결과에서 볼 수 있었다.