함수 객체? 를 만들어서, 우선순위 큐 비교방법에 끼어넣기(나름 해결)

https://www.acmicpc.net/problem/11286

백준 절댓값 힙을 풀고 있습니다.
뭐 풀이를 보니, 페어로 절댓값과 그냥 값을 넣어서 정렬하는 방법도 있는것 같은데,
저는 우선순위큐의 greater 나 less 같은 함수객체에서, 새로 절댓값끼리 비교하는 함수객체를 만들어 사용을 하려고 하는데, 이렇게 통상적으로 사용하는 방식이 맞나요??
왠지 이렇게 사용할거 같긴 한데, 구글링을 아무리 해봐도, 뭔가 그렇게 사용하는 예시는 나오지가 않고, 함수객체를 만들어서 집어넣었더니, 뭔가 오류가 나는데, 이놈도 구글링을 해봤는데 영 만족스럽지 못한 결과만 얻고 있읍니다…

#include <iostream>
#include <queue>
#include <algorithm>
#include <math.h>
using namespace std;

class comp
{
public:
	int operator()(int a, int b)
	{
		if (abs(a) < abs(b))
			return a;
	}
};





int main()
{
	priority_queue<int, vector<int>, comp()> q;
	
	int number;
	int temp;
	cin >> number;
	for (int i = 0; i < number; i++)
	{
		cin >> temp;
		if (temp == 0 && q.empty() )
		{
			printf("0");
		}
		else if (temp == 0 && !q.empty())
		{
			cout<< q.top();
			q.pop();
		}
		else
		{
			q.push(temp);
		}
	}
	

	return 0;
}

오류는
‘std::priority_queue<_Ty,_Container,_Pr>::comp’: a member of a class template cannot acquire a function type 이라고 나오는데
사실 이렇게 해도 되는 건지도 모르겠고, 뭔가 제 생각엔 엄청 편리할 것 같은데, 흐음 뭔가 사람들이 안쓰는걸 보니, 뭔가 이렇게 하면 안되는것 같기두 하구요, 잘 모르겠네요 ㄷㄷ 혹시라도 아시는 분들 있으면 키워드만 주시면 찾아 보겠읍니다
함수 객체 쳤더니 다 저런 스타일인데, 아마 넘겨주는 인자문제인거 같긴 한데 여튼 뭔가 복잡하네요.;

// 일단 백준에 정답코드 넣고 돌린뒤에 맞은사람 보니깐, 이런 스타일로 푼 분들이 있네요 오오…

템플릿 인자로 값이 아니라 타입을 넣어주셔야 합니다.

1 Like

돌아가는 코드 보니깐, 구조체로 작성을 했더라구요, class 객체를 넣어주는게 아니라 구조체를 넣어야 된다는 말씀이신가요??, 사실 아직까지 명확하게 감이 안잡히네요 ;;
value 가 아니라 type을 넣어주셔야 된다는 거죠?

std::priority_queue< int, std::vector< int >, comp >

1 Like

죄송합니다 에구 방금 혹시 이건가 해서 돌려보고 잘 돌길래, 답글 남기려구 들어왔더니 이미 핵심을 적어주셨네요. 아무쪼록 귀찮게 해서 죄송합니다.
여태까지 함수 객체인지 모르고 약간 주입식으로 () 남발했었거든요. 생성자 였네요 하나 배웠씁니다 정말 감사합니다!!