sort를 위한 연산자 오버로딩

2017-01-09 22:33:13 | 조회수 840


※이 설명은 공식 솔루션이 아닌 작성자의 개인적인 솔루션입니다.


우리가 일반적으로 사용하는 타입, 즉 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 의 +버튼을 클릭하세요.


sort를 위한 연산자 오버로딩 - 알고리즘닷컴
여기서는 https://acmicpc.net 의 문제를 기반으로 한 설명과 소스코드를 포스팅합니다.

36 개의 글