본문 바로가기
알고리즘 문제풀이/개념정리

[개념정리] STL라이브러리 - sort()2

by 로디네로 2020. 12. 26.
반응형

풀이 일시 : 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를 활용해 우선순위를 정하는 방법은 아래 우선순위 큐 포스팅에 기술해 두었다.

dbstndi6316.tistory.com/31

 

[개념정리] priority_queue

priority_queue란 자료구조에서 우선순위큐는 먼저들어간데이터 에 상관없이 우선순위가 높은 데이터가 먼저 반환되는 구조이다. C++ STL에서 priority_queue를 이용하여 쉽게 구현해낼 수 있다. vector cont

dbstndi6316.tistory.com

 

반응형

'알고리즘 문제풀이 > 개념정리' 카테고리의 다른 글

[개념정리] 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

댓글