오늘은 C++개발을 하면서 많이 사용하는 STL 의 std::set 사용하는 방법을 알아보려고 한다.
업무환경은 Redhat 7.3 을 사용하고 있고, 포스팅을 위한 테스트환경은 Ubuntu 임을 알린다.
정의
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만 관리하는 자료구조임을 직접 실행결과에서 볼 수 있었다.
'C++ > STL' 카테고리의 다른 글
C++ vector 를 랜덤으로 섞는 방법, random_shuffle 사용방법 (0) | 2022.07.31 |
---|---|
[C++] map 에 값을 입력하지 않아도 찾아지는 경우 - map 사용 시 주의사항 (0) | 2021.07.18 |
[C++] vector 값과 함께 초기화 하는 방법 (0) | 2021.07.08 |