[STL] C++ set, multiset, unordered_set





결과

multiset 결과






코드

#include <iostream>
#include <string>

#include <set>
#include <unordered_set>
using namespace std;

int main() {
	
	// set<int> set;	// 오름차순
	// set<int, greater<int>> set;	// 내림차순
	multiset<int> set;	// 중복 집합(중복 가능)

	// unordered_set<int> set;	// 정렬 x


	set.insert(4);
	set.insert(1);
	set.insert(3);
	set.insert(2);
	set.insert(3);

	cout << "개수 : " << set.size() << "\n";

	set.erase(set.find(3));	// 2개의 3 중 하나만 제거

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


	return 0;
}





1. set


set<int> set;	// 오름차순

- 집합의 구조를 갖는다.

중복 원소 불가능



- 자동으로 오름차순으로 정렬한다.


ㄴ 내림차순으로 정렬하기 위해서는 아래처럼 선언을 해준다.

set<int, greater<int>> set;	// 내림차순






2. multiset


multiset<int> set;	// 중복 집합(중복 가능)

- set 라이브러리의 포함되어 있다.


- 기존의 set과는 다르게 동일한 값의 중복 저장이 가능하다.


- erase() 함수를 사용하여 삭제 시 값을 인수로 준다면 전부 지우지만

하나 씩 지우기 위해서는 find() 함수를 추가적으로 사용하여 삭제하여야 한다.






3. unordered_set


unordered_set<int> set;	// 정렬 x

- 집합의 구조를 갖는다.

 중복 원소 불가능


- 기존의 set와는 다르게 정렬을 하지 않는다. (=삽입한 순서)


- 사용하기 위해서는 #include <unordered_set> 해주어야 한다.










insert(E e) : 삽입

- 값을 삽입한다.





erase(E e) 또는 erase(set<E>::iterator) : 삭제

- 값으로 삭제할 수 있다.


- 혹은 iterator을 인수로 주어서 삭제할 수도 있다.

ㄴ multiset일 경우 중복 값이 가능하므로 

값을 넣어 삭제 시 해당 값이 모두 삭제되지만

find를 사용하여 iterator을 인수로 주면 하나씩 삭제가 가능하다.




find(E e) : 탐색

- 존재하지 않는 값이면 set.end()를 리턴한다.

( end의 iterator )







+ Recent posts