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

Notepad96

·

2020. 11. 6. 11:29

300x250

 

 
 

1. map

map은 <key, value> 쌍의 값들을 저장하는 구조이다.

 

map은 <key, value> 쌍의 값을 갖는다는 것 빼고는 대부분 set과 유사한 구조이다.

 

 

 

 

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

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

notepad96.tistory.com

 

 

 

set 컨테이너 구조

 

따라서 set에서 사용하였던 count, find, upper_bound 와 같은 멤버 함수들도 그대로 존재한다.

 

 

하지만 set과 다르게 [] 연산자를 지원하여 insert 함수를 사용하지 않아도 쉽게 삽입을 할 수 있다.

 

 

 

 

map은 set과 마찬가지로 특정 정렬 기준(less 또는 greater)으로 key를 자동으로 정렬하는 노드 기반 컨테이너이다.

 

 

따라서 key가 아닌 value값을 기준으로 정렬을 하고 싶을 경우에는 map에 해당하는 pair를 갖는 vector를 생성하여

 

vector를 algorithm의 sort 함수를 사용하여 정렬해 주어야 한다.

 

 

 

 

 


2. 코 드

환경 : Visual Studio 2019

#include <iostream>
#include <vector>
#include <algorithm>
#include <map>
using namespace std;

int main() {
	
	/* 생성자 */
	map<int, int> m;		// <key, value> key 오름차순, 기본 값 : less<int>
	//map<int, int, greater<int>> m;

	/* 삽입, 삭제 */
	m[1] = 10;	// key=1, value=10, [] 연산자를 사용하여 삽입
	m.insert(pair<int, int>(2, 20));	// pair객체를 생성하여 삽입
	m.insert(make_pair(3, 30));
	m[4] = 40;
	m[5] = 50;
	m[1] = 50;	// key가 이미 존재하므로 value이 변경된다.
	m.erase(5);

	
	/* 접근 */
	for (pair<int, int> ii : m) {
		cout << ii.first << ":" << ii.second << " ";
	}
	cout << "\n";

	for (auto it = m.begin(); it != m.end(); it++) {
		cout << it->first << ":" << it->second << " ";
	}
	cout << "\n";


	/* 탐색 */
	//auto it = m.find(5);
	map<int, int>::iterator it = m.find(1);
	if ( it == m.end()) {
		cout << "해당 key는 존재하지 않습니다.\n";
	}
	else {
		cout << "key " << it->first << "의 값은 : " << it->second << "\n";
	}



	/* value 값을 기준으로 정렬 */
	vector<pair<int, int>> v(m.begin(), m.end());	// 반복자를 받는 생성자

	sort(v.begin(), v.end(), [](pair<int, int> a, pair<int, int> b) {	// 익명 함수 사용
		return a.second < b.second;
		});

	for (pair<int, int> ii : v) {
		cout << ii.first << ":" << ii.second << " ";
	}
	cout << "\n";

	return 0;
}
 
 
결과

 

- insert는 pair 객체를 생성하여 넣거나 [] 연산자를 사용하여 넣거나 다양한 방법이 있다.

 
 

- find 멤버 함수는 set과 마찬가지로 인수의 해당하는 값의 key가 존재하지 않는다면 해당 map의 map.end() 반복자를 반환해주며 존재한다면 해당 원소의 반복자를 반환해 준다.

 
 
 

- value 값을 기준으로 정렬을 하고자 하여 vector를 반복자를 받는 생성자를 사용하여서 생성한다.

이 후  algorithm 라이브러리의 sort함수를 사용하여 익명 함수를 구현하여 value의 해당하는 값을 오름차순으로 정렬을 해주었다.

 
 
 
 


3. 참 조

 
 

map - C++ Reference

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

www.cplusplus.com

 

 

300x250