구조체(struct)와 연산자 오버로딩을 통한 sort in C++

Purple·2021년 9월 7일
2

1. 구조체와 연산자 오버로딩을 이용한 sort 예시 코드

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

using namespace std;
struct Data{
	int when, money;
	Data(int a, int b) {
		when = a;
		money = b;
	}
	bool operator<(const Data &d) const {
		return when < d.when;
	}
};

int n;
vector<Data> V;
int main() {
	freopen("input.txt", "rt", stdin);
	cin >> n;
	
	for(int i=1; i<=n; i++) {
		int temp1, temp2;
		cin >> temp1 >> temp2;
		V.push_back(Data(temp1, temp2));
	}
	
	// before sort 
	for(int i=0; i<V.size(); i++) {
		cout << "when : " << V[i].when;
		cout << ", money : " << V[i].money;
		cout << "\n";
	}
	
	cout << "\n";
	cout << "sorting by when.....\n"; 
	cout << "\n";
	sort(V.begin(), V.end());
	
	// after sort 
	for(int i=0; i<V.size(); i++) {
		cout << "when : " << V[i].when;
		cout << ", money : " << V[i].money;
		cout << "\n";
	}
}
  • strcut : 내가 사용하고자하는 자료형을 임의로 정의하여 사용할 수 있는 "구조체"라는 것이다.
  • bool operator<(const Data &b) const 이하 부분 : 해당 구조체를 이용하여 sort를 할때 무엇을 기준으로 할지 오버로딩해주는 부분이다. sort를 하고자한다면 반드시 정의해주어야 한다.

ex) 입력은 다음과 같다.
5
5 14
2 23
3 1
4 22
1 155

다음과 같이 when > d.when으로 한다면, 내림 차순으로 정렬

bool operator<(const Data &d) const {
		return when > d.when;
	}

money를 기준으로 정렬하고 싶다면, 다음과 같이 수정한다.

bool operator<(const Data &d) const {
		return money < d.money;
	}

profile
안녕하세요.

0개의 댓글