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

Notepad96

·

2020. 11. 7. 19:34

300x250

 

 

 
 

1. unordered_set, _multiset

 

set과 multiset은 값을 삽입시키면 자동으로 정렬이되어 저장되는 구조였다.

 

만약 정렬을 하지 않고서 삽입한 일련의 순서를 유지시키고 싶다.

 

라고 한다면 unordered_set을 사용하면 된다.

 

 

unordered_set과 unordered_multiset은 정렬이 되지 않는 점을 빼면 각각 set과 multiset와 동일하다.

 

 

 

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

  1. set set은 특정 기준에 의하여 원소들이 자동 정렬되는 노드 기반 컨테이너이다. set은 기본적으로 오름차순(less) 정렬이고 greater 조건자를 줌으로써 내림차순으로 정렬할 수도 있다. set은 유

notepad96.tistory.com

 

 

unordered_set, unordered_multiset을 사용하기 위해서는 unordered_set을 include하여야 한다.

 

 

 


2. 코 드

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

int main() {
	unordered_set<int> uset;
	unordered_multiset<int> umset;

	uset.insert(3);	// 3
	uset.insert(5);	// 3 5
	uset.insert(1);	// 3 5 1
	uset.insert(4);	// 3 5 1 4
	uset.insert(2);	// 3 5 1 4 2
	uset.insert(5); // 3 5 1 4 2

	for (int i : uset) {
		cout << i << " ";
	}
	cout << "\n";

	for (auto it = uset.find(5); it != uset.end(); it++) {
		cout << *it << " ";
	}
	cout << "\n";

	umset.insert(5);	// 5
	umset.insert(3);	// 5 3
	umset.insert(1);	// 5 3 1
	umset.insert(4);	// 5 3 1 4
	umset.insert(2);	// 5 3 1 4 2
	umset.insert(5);	// 5 5 3 1 4 2 
	umset.insert(1);	// 5 5 3 1 1 4 2


	for (int i : umset) {
		cout << i << " ";
	}
	cout << "\n";


	return 0;
}
 
 
 
결과
 
 
 
 

- unordered_set의 경우 set처럼 중복된 원소를 갖을 수 없으므로 이미 삽입된 원소 5를 삽입하여도 아무일도 일어나지 않는다.

 

여기서 중요한점은 기존의 저장되어 있던 5는 그대로 있으며 삽입이 실패한다는 것이다.

그 때문에 2번 째로 삽입하였던 5를 find로 찾아서 얻은 반복자를 통하여 end()까지 루프를 하였을 경우 맨 처음 삽입하였던 3은 출력되지 않았다.

 
 
 
 
 

- unordered_multiset은 multiset처럼 중복된 원소를 갖을 수 있다.

 

그러나 출력된 화면을 보면 중복된 원소 삽입 시 일련의 순서로 삽입되는 것이 아니라 이미 존재하는 중복 원소 뒤에 이어서 삽입되는 것을 확인할 수 있다.

 
 
 
 


3. 참 조

 
 

- C++ Reference

 

www.cplusplus.com

 
 
300x250