문제풀이(Problem Solving)/C++ 문제풀이에 유용한 것들

STL 셋, 집합, set 사용법 [C++]

게임이 더 좋아 2021. 6. 13. 19:09
반응형
728x170

 

set를 알아보자

 

set란

Sets are containers that store unique elements following a specific order.

++기본적으로는 오름차순으로 정렬된다.

 

집합과 같다.

같은 원소는 존재하지 않고 정렬되어있는 컨테이너를 말한다.

 

정렬되어있고 유일성을 가져서 

중복제거에 많이 쓰이고는 한다.

 

 

**만약 중복원소를 가지고 싶다면 Multiset을 이용할 수 있다.

 

 

주요 함수로는

  • set<T>: 원하는 자료형 및 클래스 T를 통해 생성

 

iterator(반복자)

  • begin(): beginning iterator를 반환
  • end(): end iterator를 반환

 

Insert & Update & Delete

  • insert(element): 세트에 element를 추가
  • erase(element): 세트에서 해당하는 element를 삭제
  • clear(): 세트에 있는 모든 원소 삭제

 

Read

  • find(element): element에 해당하는 iterator를 반환
  • count(element): 해당 element가 있으면 1 아니면 0 반환.

 

나머지

  • empty(): 비어있으면 true 아니면 false를 반환
  • size(): 세트에 포함되어 있는 원소들의 수를 반환

 

 

 

예시

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

using namespace std;

int main(){

	// set
	set<string> s;


	// insert(element)
	s.insert("abc");
	s.insert("def");
	s.insert("ghi");
	s.insert("jkl");


	// erase(element)
	s.erase("jkl");


	// empty(), size()
	if(!s.empty()) cout << "s size: " << s.size() << '\n';


	// find(element)
	cout << *s.find("abc") << '\n';
	cout << *s.find("def") << '\n';


	// count(element)
	cout << "abc count: " << s.count("abc") << '\n';


	// begin(), end()
	cout << "traverse" << '\n';
	for(auto it = s.begin(); it != s.end(); it++){
		cout << "value: " << *it << '\n';
	}

	return 0;

}

 

 

딱히 다른 특별한 예는 없다.

 

다시 말하자면

set을 왜 쓸까???

 

이진탐색트리 기반이라 검색이 아주 빠르고

자동 정렬이 된다.

데이터 삽입과 동시에 정렬이 일어나므로 좋다

 

다시 말하자면

 

- 삽입과 동시에 정렬해야 할때

- key가 있는지 없는지 알아야 할때

-  빠른 검색으로 존재 여부를 신속하게 알고 싶을때

 

set을 쓰면 되겠다.

728x90
반응형
그리드형