Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 코딩테스트
- BFS
- DP
- 삼성역량테스트
- 포스코 교육
- dfs
- 임베디드 딥러닝
- dfs문제
- TensorFlow Lite
- 영상처리
- 알고리즘
- tinyml
- MCU 딥러닝
- 포스코 AI교육
- bfs문제
- 코테 문제
- 포스코 ai 교육
- 그리디
- 자료구조
- 컴퓨팅사고
- DP문제
- 딥러닝
- 코테
- 삼성코테
- 다이나믹프로그래밍
- 삼성코딩테스트
- 삼성역테
- sort
- 초소형머신러닝
- tflite
Archives
- Today
- Total
코딩뚠뚠
[개념정리] STL라이브러리 - sort()2 본문
반응형
풀이 일시 : 2020-08-02
개념 :
sort()의 활용방안 part2
활용1 :
클래스 대신 Pair 라이브러리 사용하기
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
vector<pair<int, string>>v; //vector pair 선언
v.push_back(pair<int, string>(9, "A"));
v.push_back(pair<int, string>(8, "B"));
v.push_back(pair<int, string>(7, "C"));
v.push_back(pair<int, string>(5, "D"));
v.push_back(pair<int, string>(6, "E"));
sort(v.begin(), v.end()); //숫자의 오름차순으로 정렬된다.
for (int i = 0; i < v.size(); i++) {
cout << v[i].second << ' '; //정렬은 숫자로 시켰지만 출력은 이름으로 한다.
}
return 0;
}
활용2 :
Pair 에서도 compare()를 만들어 사용하기
성적대로 정렬을 하되 성적이 같다면 나이가 어린 사람이 출력되게끔 한다.
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
bool compare(pair<string, pair<int, int> >a, pair < string, pair<int, int> > b) {
if (a.second.first == b.second.first) { //성적이 같으면
return a.second.second > b.second.second; //연도 높으면 나이어린거
}
else {
return a.second.first > b.second.first; //성적높은사람 우선
}
}
int main() {
vector<pair<string, pair<int, int> > > v;
v.push_back(pair<string, pair<int, int> >("A", make_pair(90, 18961225)));
v.push_back(pair<string, pair<int, int> >("B", make_pair(97, 19900510)));
v.push_back(pair<string, pair<int, int> >("C", make_pair(95, 19970201)));
v.push_back(pair<string, pair<int, int> >("D", make_pair(90, 19991230)));
v.push_back(pair<string, pair<int, int> >("E", make_pair(88, 19870301)));
sort(v.begin(), v.end(), compare);
for (int i = 0; i < v.size(); i++) {
cout << v[i].first << ' ';
}
return 0;
}
활용3:
struct 를 이용한 vector 에서 compare 사용
typedef struct Edge
{
int x;
int y;
int z;
} Edge;
우선 struct 를 선언해준다.
vector<Edge> v;
///
v에 값 입력
///
bool compare(const Edge & a, const Edge & b)
{
if (a.x < b.x) return true; // 제일 먼저 x를 기준으로 오름차순 정렬
else if (a.x == b.x) // 만약에 x가 같다면
{
if (a.y < b.y) return true; // y를 기준으로 오름차순 정렬
else if (a.y == b.y) // 만약에 y가 같다면
{
if (a.z < b.z) return true; // z를 기준으로 오름차순 정렬
}
}
// 각 경우에 대하여 else를 고려할 필요가 없다.
return false;
}
sort(v.begin(), v.end(), compare);
compare 함수를 다음과 같이 작성해줌으로써 sort를 할 수 있다.
활용4:
priority_queue 를 사용할 때 compare를 활용해 우선순위를 정하는 방법은 아래 우선순위 큐 포스팅에 기술해 두었다.
반응형
'알고리즘 문제풀이 > 개념정리' 카테고리의 다른 글
[개념정리] stack (0) | 2020.12.26 |
---|---|
[개념정리] vector container (0) | 2020.12.26 |
[개념정리] tuple (0) | 2020.12.26 |
[개념정리] Pair (0) | 2020.12.26 |
[개념정리] STL라이브러리 - sort()1 (0) | 2020.12.26 |