[STL] Set 생성, 삽입, 삭제 등 사용법

Notepad96

·

2020. 11. 5. 11:59

300x250

 

 

 
 

1. set

set은 특정 기준에 의하여 원소들이 자동 정렬되는 노드 기반 컨테이너이다.

 

set은 기본적으로 오름차순(less) 정렬이고 greater 조건자를 줌으로써 내림차순으로 정렬할 수도 있다.

 

기본 값 : 오름차순 정렬

set은 유일한 원소만을 갖을 수 있는 구조로서 수학적으로 집합을 의미하는 것을 알 수 있다.

 

중복된 원소를 갖고자 한다면 multiset을 사용하여야 한다.

 

 

또한, 균형 이진 트리로 구현되어 빠른 시간으로 원소를 탐색할 수 있으며 이에 따라 탐색할 수 있도록 여러가지 탐색 함수를 제공해 준다.

 

 

 


2. 코 드

환경 : Visual Studio 2019
 
#include <iostream>
#include <set>
using namespace std;

int main() {
	
	/* 생성자 */
	set<int> set;		// 오름차순, 기본 값 : less<int>
	//set<int, greater<int>> set;		//내림차순
	
	/* 삽입, 삭제 */
	set.insert(30);
	set.insert(40);
	set.insert(10);
	set.insert(20);
	set.insert(50);
	set.insert(50);		// 중복 저장 x
	set.erase(20);

	for (int i : set) {
		cout << i << " ";
	}
	cout << "\n";
	for (auto it = set.begin(); it != set.end(); it++) {
		cout << *it << " ";
	}
	cout << "\n";


	/* 값 탐색 */
	// 1. 삽입 성공여부 확인
	auto it = set.insert(50);	// pair< set<int>::iterator, bool >
	if (it.second) {
		cout << *it.first << "삽입 성공\n";
	}
	else {
		cout << *it.first << "삽입 실패\n";
	}


	// 2. 개수 탐색. set은 중복이 불가하므로 0 또는 1의 값
	cout << "원소 60 개수 : " << set.count(60) << "\n";


	// 3. find 함수로 탐색
	if (set.find(50) == set.end()) {	// find는 존재하지 않으면 set.end()를 리턴
		cout << "원소 50은 현재 없다.\n";
	}
	else {
		cout << "원소 50은 현재 존재한다.\n";
	}


	return 0;
}
 
 
 
결과
 
 
 

- insert 멤버 함수는 이미 존재하는 원소의 값을 삽입하고자하면 실패하여 아무일도 발생하지 않는다.

또한, insert는 pair< set<int>::iterator, bool > 타입을 리턴하여 여기서 second값을 확인하면 이미 원소가 존재하여 삽입이 실패하였는지 아니면 삽입이 성공하였는지의 여부를 확인할 수 있다.

 

 

- count 멤버 함수는 원소의 개수를 리턴해주며 set의 경우 유일한 원소만을 갖을 수 있으므로 0 또는 1의 값을 얻을 수 있다.

 
 

- find 멤버 함수는 원소가 존재하면 해당 원소의 반복자를 반환해주고, 존재하지 않는다면 컨테이너의 끝 반복자인 end() 반복자를 반환해 준다.

 

따라서 find의 결과가 end() 반복자라면 해당 원소는 존재하지 않는다는 의미이다.

 

 
 

3. 참 조

 
 

set - C++ Reference

difference_typea signed integral type, identical to: iterator_traits ::difference_type usually the same as ptrdiff_t

www.cplusplus.com

 

300x250