[C++] 정렬 기준 설정해서 정렬하기, map, prioiry_queue에도 사용 가능
2023. 12. 7. 16:13ㆍ프로그래밍 언어/C++\C
기본적인 방법은 cmp함수를 정의해서 거기에 정렬 기준을 구성하고, sort 함수나 map, priority_queue에 인자로 넣어주면 된다. 맵과 셋에서의 사용법은 똑같다.
내림차순 cmp 함수를 정의하려면 어떻게 할까?
return a > b;
이것만 기억하면 된다. cmp 함수로 앞에 들어온 인자가 더 큰 것을 리턴하게 하면, 더 큰 것을 앞으로 두고 정렬하겠다는 뜻이다. 실제 사용 예시들을 보자.
#include <iostream>
#include <map>
struct CustomCompare {
bool operator()(int a, int b) const {
return a > b; // 내림차순 정렬
}
};
int main() {
std::map<int, std::string, CustomCompare> myMap;
myMap[3] = "Three";
myMap[1] = "One";
myMap[4] = "Four";
myMap[2] = "Two";
// 출력: {4, "Four"}, {3, "Three"}, {2, "Two"}, {1, "One"}
for (const auto& pair : myMap) {
std::cout << "{" << pair.first << ", \"" << pair.second << "\"} ";
}
return 0;
}
기본적으로 위의 방식처럼 사용자 정의 비교함수를 정의하고 인자로 사용한다. 나머지 자료구조도 보자.
#include <iostream>
#include <queue>
struct CustomCompare {
bool operator()(int a, int b) const {
return a > b; // 내림차순 정렬
}
};
int main() {
std::priority_queue<int, std::vector<int>, CustomCompare> myPriorityQueue;
myPriorityQueue.push(3);
myPriorityQueue.push(1);
myPriorityQueue.push(4);
myPriorityQueue.push(2);
// 출력: 4 3 2 1
while (!myPriorityQueue.empty()) {
std::cout << myPriorityQueue.top() << " ";
myPriorityQueue.pop();
}
return 0;
}
#include <iostream>
#include <algorithm>
#include <vector>
struct CustomCompare {
bool operator()(int a, int b) const {
return a > b; // 내림차순 정렬
}
};
int main() {
std::vector<int> myVector = {3, 1, 4, 2};
// 벡터를 내림차순으로 정렬
std::sort(myVector.begin(), myVector.end(), CustomCompare());
// 출력: 4 3 2 1
for (int value : myVector) {
std::cout << value << " ";
}
return 0;
}
'프로그래밍 언어 > C++\C' 카테고리의 다른 글
[C++] 맵과 우선 순위 큐에서 정렬 기준 재정의하기 (0) | 2024.02.27 |
---|---|
[C++] 잡기술) 맵의 모든 요소를 벡터로 옮기기 (1) | 2023.12.07 |
[C++] Map vs Set vs Priority Queue (0) | 2023.12.07 |
[C++] 이분 탐색 메서드 - binary_search, lower_bound, upper_bound (0) | 2023.09.07 |
[C++] 2차원 배열과 벡터의 동적 할당 (0) | 2023.09.06 |