백준 1525 (https://www.acmicpc.net/problem/1525) 문제를 풀다가 현재 내가 아는 자료형으로 풀기 힘들다는 생각이 들어서 구글링을 하다가 set 이라는 자료형을 찾아냈다. 중복되지 않는 무언가를 저장할 때 매우 유용해 보인다. set 자료형에 대해서 간단히 알아보자.
set 기본 개념
set은 노드 기반 컨테이너이다. 원소들은 중복이 허용되지 않으며, 원소 삽입 시 원소는 자동으로 정렬이 된다. 기본 정렬 기준은 오름차순이다.
set 선언
1. 기본 선언 하기 -> set<T> s;
2. 정렬 기준 세우기 -> set<T, pred> s;
pred는 정렬 기준을 바꾸기 위한 구조체이다. 기본은 less, 내림차순으로 바꾸고 싶으면 greater로 바꾸면 된다. 그 이외의 정렬 기준을 세우고 싶다면 정렬 구조체를 하나 임의로 지정해 주자.
1
2
3
4
5
|
struct pred{
bool operator() (매개변수 1, 매개변수 2) const {
return 매개변수 1 < 매개변수 2;
}
}
|
cs |
기본 제공되는 것 사용하기
set<T, less<T>> s;
set<T, greater<T>> s;
3. 기존 set 복사 -> set<T> s1(s2);
4. 기존 vector 복사 (vector<T> v) -> set<T> s(v.begin(), v.end());
set 함수
begin() : 맨 첫번째 원소의 iterator 반환
end() : 맨 마지막 원소의 iterator 반환 (정확히는 마지막 원소의 다음)
rbegin(), rend() : 위의 것들과 반대로 작동함, 반대로 출력하고 싶을때 사용
clear() : 모든 원소 제거
count(k) : 원소 k의 개수 반환 (set 자료형은 중복되는 값이 없기 때문에 0과 1밖에 없다. multiset에서 주로 사용)
insert(k) : 원소 k를 삽입, 자동으로 정렬된 위치에 삽입된다. 성패 여부는 리턴값 pair<iteraor, bool> 로 반환됨.
erase(k) : k 삭제
find(k) : k 찾기, k를 가리키는 iterator 반환, 없을 시 s.end() 반환
size() : 원소 갯수 반환
'프로그래밍 언어 > C C++' 카테고리의 다른 글
C++ list 자료형 사용법 (0) | 2021.06.21 |
---|---|
C++ map 자료형 사용법 (0) | 2021.06.19 |
C언어의 static 변수 (2) | 2021.06.08 |
size_t 는 무엇일까? (0) | 2021.05.28 |
C언어 메모리 누수 확인하기 (0) | 2021.05.19 |