그냥 게임개발자

operator() 본문

내 개인적인 공부/자료구조

operator()

sudoju 2024. 4. 14. 22:46

operator()는 C++에서 함수 호출 연산자라고 불립니다.

객체를 함수처럼 호출할 수 있게 해주는 연산자 오버로딩이라고 보시면 될 것 같습니다.

 

이 연산자를 클래스나 구조체에서 오버로딩을 함으로써 해당 타입의 객체에 대한 "호출 가능한 객체" 또는 "함수 객체"를 만들 수 있습니다.

이는 함수 객체나 우선순위 큐 정렬 등에 사용될 수 있습니다.

 

한마디로 기존에 존재하던 연산자들 있죠?

=, ==, >, ++, 이러한 것들을 내가 원하는 다른 기능들로 커스텀 할 수 있다는 이야기입니다.

 

일단 원형부터 살펴보죠.

 

class ClassName
{
public:
    반환타입 operator()(매개변수) 
    {
        // 구현
    }
};

 

 

반환 타입은 함수 호출 시에 반환되는 데이터 타입입니다.

매개변수는 함수가 받아들일 때의 매개변수들입니다.

 

 

함수 객체

 

class Adder
{
public:
    int operator()(int a, int b)
    {
        return a + b;
    }
};

int main()
{
    Adder adder;
    cout << adder(3, 4);
    return 0;
}

결과값 7이 나왔다.

 

이 코드에서 볼수 있듯이 Adder클래스는 operator()를 오버로딩해서 두 정수를 받아 그 합을 반환하는 형태입니다.

adder 객체는 마치 함수처럼 호출이 될 수 있고 adder(3, 4)는 7을 반환한 것이죠.

 

우선순위큐의 비교 연산자

 

struct Compare
{
    bool operator()(const int& a, const int& b)
    {
        return a > b;		// MinHeap
    }
};

priority_queue<int, vector<int>, Compare> pq;

 

Compare는 int 타입의 두 요소를 비교해서 첫 번째 요소가 두 번째 요소보다 큰 경우 true를 반환합니다.

이러한 비교 방식을 기준으로 priority_queue는 내부적으로 요소를 정렬해요.

여기서 Compare함수 객체는 MinHeap(최소 힙) 구조의 우선 순위 큐를 만드는데 사용이 됩니다.

저번 포스팅에서 말씀 드렸듯이!! 우선순위 큐에서는 >가 오름차순 <가 내림차순입니다.

sort 기준으로는 반대에요 <가 오름차순 >가 내림차순입니다 원래는.

우선순위 큐만 달라요

 

'내 개인적인 공부 > 자료구조' 카테고리의 다른 글

primitive 타입, reference 타입  (0) 2024.04.14
자료구조 시간 복잡도  (0) 2024.04.14
구조체 우선순위 큐  (0) 2024.04.14
priority queue  (0) 2024.04.14
vector에 struct 정렬  (0) 2024.04.14