DNF LOVE

C++에서 <algorithm>을 사용하여 정렬을 해보도록 하자. 본문

Programming/C++

C++에서 <algorithm>을 사용하여 정렬을 해보도록 하자.

botho 2019. 10. 23. 00:07
반응형

SORT알고리즘은 <algorithm> 헤더 파일에 존재한다. 

* Sort(start, end)를 이용하여 (Start, End) 범우에 있는 인자를 오름차순으로(기본) 정렬해주는 함수이다. iterator 처럼 start를 포함하고, End 를 포함하지 않는 구간을 말한다.

* Sort는 퀵 정렬을 기반으로 구현되어 있으며 O(nlongN)이다.


1. 오름차순(Default)

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

using namespace std;

int main()
{
	vector<int> v;
	v.push_back(5);
	v.push_back(2);
	v.push_back(1);
	v.push_back(10);
	v.push_back(1);

	sort(v.begin(), v.end());

	for (int i = 0; i < v.size(); i++) {
		cout << v[i] << endl;
	}

	return 0;
}

 

2. 내림차순(DESC)

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

using namespace std;

int main()
{
	vector<int> v;
	v.push_back(5);
	v.push_back(2);
	v.push_back(1);
	v.push_back(10);
	v.push_back(1);

	sort(v.begin(), v.end(), greater<int>());

	for (int i = 0; i < v.size(); i++) {
		cout << v[i] << endl;
	}

	return 0;
}

 

3. compare 사용

#include "pch.h"
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>

using namespace std;

class Product {
public :
	string pname;
	int pay;

	Product(string pname, int pay) : pname(pname), pay(pay) {}
};

bool compare(Product a, Product b) {
	if (a.pay == b.pay) {
		return a.pname < b.pname; // 페이가 같으면 이름 가나다라 순
	}
	else {
		return a.pname > b.pname; // 페이가 다르면 작은 순부터
	}
}

int main(void)
{
	vector<Product> v;

	v.push_back(Product("멘토스", 700));
	v.push_back(Product("멘토스", 1000));
	v.push_back(Product("비틀즈", 700));
	v.push_back(Product("비틀즈", 1200));
	v.push_back(Product("새콤달콤", 500));

	sort(v.begin(), v.end(), compare);

	for (int i = 0; i < 5; i++) {
		cout << v[i].pname << " : " << v[i].pay << endl;
	}

	return 0;
}

반응형