C++ map value sort - 맵 값 정렬

Notepad96

·

2020. 11. 17. 05:55

300x250

 

 

 

 

1. Map value sort

 

Map 컨테이너에서 처음 선언하는 방식의 따라 Key 기준으로 오름차순, 내림차순을 지정할 수 있다.

 

 

 

 

하지만 1. 만약 Key가 아닌 Value를 비교하여 정렬을 하고 싶을 경우

 

 

혹은 2. 단순히 오름차순, 내림차순이 아닌 특정 조건에 의하여 정렬을 하고 싶을 경우

 

 

 

 

Map을 Vector로 변환한다음 Vector에서 정렬을 하던것처럼 해주면 된다.

 

 

 


2. 코 드

환경 : Visual Studio 2019

#include <iostream>
#include <algorithm>
#include <vector>
#include <map>
using namespace std;
typedef pair<int, int> ii;

int main() {
	map<int, int> map;

	map[5] = 20;
	map[2] = 50;
	map[3] = 10;
	map[4] = 40;
	map[1] = 30;
	map[6] = 60;

	for (auto it : map) {
		cout << it.first << ":" << it.second << " ";
	}
	cout << "\n==============================\n";

	vector<ii> v(map.begin(), map.end());
	for (ii it : v) cout << it.first << ":" << it.second << " ";
	cout << "\n==============================\n";

	sort(v.begin(), v.end(), [](ii a, ii b) {
		return a.second > b.second;
		});

	for (ii it : v) cout << it.first << ":" << it.second << " ";
	cout << "\n==============================\n";

	return 0;
}
 
결과
 
 

- map은 pair<T, T> 타입으로 Key, Value를 저장하고 있으므로 이를 옮길 vector 또한 타입을 일치시켜 준다.

 
 
 

※ typedef pair<int, int> ii; 처럼 재정의 해줌으로써 코드를 더욱 간결하게 만들 수 있다.

 

단, 봤을 때 어떤 것을 의미하는 지 알 수 있도록 직관성이 있게 이름을 지정해야 한다.

 
 
 
 

- vector에서는 반복자를 인자로 갖는 생성자가 존재하므로

 

vector<ii> v(map.begin(), map.end()) 

 

처럼 간단하게 map -> vector로 옮길 수 있다.

 
 
 
 

- 각 원소의 first에는 Key값이, second에는 Value 값이 들어가게 되며

 

람다 함수를 사용하여서 vector를 Value 기준 내림차순으로 정렬 하였다.

 
 
 


3. 참 조

 
 

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

1. vector vector은 배열 기반 컨테이너이다. 따라서 배열과 비슷하여 사용하기 쉬워서 빈번하게 사용된다. 하나의 메모리 블록에 연속하여 저장되는 특징을 갖는다. 연속하여 저장되어 원소에 접근

notepad96.tistory.com

 

 

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

1. map map은 쌍의 값들을 저장하는 구조이다. map은 쌍의 값을 갖는다는 것 빼고는 대부분 set과 유사한 구조이다. 2020/11/05 - [C++/STL] - [STL] Set 생성, 삽입, 삭제 등 사용법 [STL] Set 생성, 삽입, 삭제..

notepad96.tistory.com

 

 

 

 

C++ vector 정렬(sort) - 오름차순, 내림차순

  1. 정렬(Sort) C++ 에서는 STL algorithm 라이브러리에서 sort 함수를 지원해준다. 정렬 방식은 퀵 정렬로서 빠른 속도를 보장한다. sort 함수는 일련의 반복자를 사용함으로 Set이나 Map 같은 컨테이너에

notepad96.tistory.com

 

 

300x250