※이 설명은 공식 솔루션이 아닌 작성자의 개인적인 솔루션입니다.
우리가 일반적으로 사용하는 타입, 즉 primitive type 또는 STL에서 정렬의 기준을 제공하는 class에서는 별도의 처리 없이 다음과 같은 함수를 사용할 수 있습니다.
int w[10]={3,4,1,5,1,2,3,9,10,2};
sort(w,w+10);
하지만 우리가 임의로 만든 class 등에서 위와 같은 방법으로 sort를 할 경우 컴파일 에러가 발생합니다. 정렬할 기준을 알 수 없기 때문이죠.
따라서 정렬할 기준을 class에 제시해 주어야 하는데, 그것을 연산자 오버로딩을 통해 가능하게 할 수 있습니다.
class Node
{
public:
int no, x, y, v;
double tm;
Node(int a, int b, int c, int d) { no = a, x = b, y = c, v = d; }
bool operator < (const Node & n)const
{
return tm == n.tm ? no < n.no : tm < n.tm;
}
};
위와 같은 방식으로 class를 작성할 수 있습니다. const Node &n은 현재 클래스 변수와 비교를 할 대상 클래스 변수를 의미합니다. < 연산자를 오버로딩함으로써 Node라는 class의 정렬 기준을 만들어 주었습니다.
이외에도 문제를 풀 때 객체를 선언하여 어떠한 정렬 기준을 만들어 주고 싶을 때는 위와 같은 연산자 오버로딩을 통해 그 기준을 만들 수 있으며, 또는 임의의 함수를 제작하여 정렬을 할 수도 있습니다. 해당 방법을 확인하려면 STEPS 의 +버튼을 클릭하세요.