C++ STL sort(), vector, pair

용상윤·2021년 9월 27일
0

C++ 표준 템플릿 라이브러리(STL: Standard Template Library) sort 함수 다루기

동빈나 실전 알고리즘 강좌
https://www.youtube.com/watch?v=YJ-OUnZu7nQ&list=PLRx0vPvlEmdDHxCvAQS1_6XV4deOwfVrz&index=9
https://blog.naver.com/ndb796/221227975229

sort()

기본적인 사용법

오름차순(default) 정렬하기

#include <iostream>
#include <algorithm>

using namespace std;

int main(void){
	int a[10] = {9, 3, 5, 4, 1, 10, 8, 6, 7, 2};
	sort(a, a+10);
	for(int i=0; i<10; i++){
		cout << a[i] << " ";
	}
}

// 1 2 3 4 5 6 7 8 9 10

compare

함수를 이용하여 내림차순으로 정렬하기

#include <iostream>
#include <algorithm>

using namespace std;

bool compare(int a, int b){
	// default: a < b
	return a > b;
}

int main(void){
	int a[10] = {9, 3, 5, 4, 1, 10, 8, 6, 7, 2};
	sort(a, a+10, compare);
	for(int i=0; i<10; i++){
		cout << a[i] << " ";
	}
}

// 10 9 8 7 6 5 4 3 2 1

객체에서 사용하기

객체에서 사용한다면 연산자 오버로딩을 잘 정의해줘야 한다.

#include <iostream>
#include <algorithm>

using namespace std;

class Student {
	public:
		string name;
		int score;
		Student(string name, int score){
			this->name = name;
			this->score = score;
		}
		//비교 연산자 오버로딩 (점수가 작은 순서)
		bool operator < (Student &student){
			return this->score < student.score;
		} 
};

int main(void){
	Student students[] = {
		Student("A", 90),
		Student("B", 95),
		Student("C", 92),
		Student("D", 100),
		Student("E", 88)
	};
	
	sort(students, students+5);
	for(int i=0; i<5; i++){
		cout << students[i].name << " ";
	}
}

// E A C B D

vector, pair

첫 번째 원소 기준으로 정렬

begin(), end()는 default로 첫 번째 원소 기준으로 정렬을 시킨다.

#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

int main(void){
	
	vector<pair<int, string> > v;
	
	v.push_back(pair<int, string>(90, "A"));
	v.push_back(pair<int, string>(95, "B"));
	v.push_back(pair<int, string>(92, "C"));
	v.push_back(pair<int, string>(100, "D"));
	v.push_back(pair<int, string>(88, "E"));
	
	sort(v.begin(), v.end());
	
	for(int i=0; i < v.size() ; i++){
		cout << v[i].second << " ";
	}
	
	return 0;
}

// E A C B D

두 번째 원소 기준으로 정렬

compare 함수가 필요하다.

#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

bool compare(pair<string, int> a, pair<string, int> b){
	return a.second < b.second;
}

int main(void){
	
	vector<pair<string, int> > v;
	
	v.push_back(pair<string, int>("A", 90));
	v.push_back(pair<string, int>("B", 95));
	v.push_back(pair<string, int>("C", 92));
	v.push_back(pair<string, int>("D", 100));
	v.push_back(pair<string, int>("E", 88));
	
	sort(v.begin(), v.end(), compare);
	
	for(int i=0; i < v.size() ; i++){
		cout << v[i].first << " ";
	}
	
	return 0;
}

// E A C B D

기준이 여러 개 일 때

성적이 같다면 생일이 느린 순으로 정렬하시오.

#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(void){
	
	vector<pair<string, pair<int, int> > > v;
	
	v.push_back(pair<string, pair<int, int> >("A", make_pair(90, 19940915)));
	v.push_back(pair<string, pair<int, int> >("B", make_pair(94, 19941102)));
	v.push_back(pair<string, pair<int, int> >("C", make_pair(92, 19940108)));
	v.push_back(pair<string, pair<int, int> >("D", make_pair(90, 19941017)));
	v.push_back(pair<string, pair<int, int> >("E", make_pair(94, 19940616)));
	
	sort(v.begin(), v.end(), compare);
	
	for(int i=0; i < v.size() ; i++){
		cout << v[i].first << " ";
	}
	
	return 0;
}

// D A C B E
profile
달리는 중!

0개의 댓글