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 이라고 나오는데
사실 이렇게 해도 되는 건지도 모르겠고, 뭔가 제 생각엔 엄청 편리할 것 같은데, 흐음 뭔가 사람들이 안쓰는걸 보니, 뭔가 이렇게 하면 안되는것 같기두 하구요, 잘 모르겠네요 ㄷㄷ 혹시라도 아시는 분들 있으면 키워드만 주시면 찾아 보겠읍니다
함수 객체 쳤더니 다 저런 스타일인데, 아마 넘겨주는 인자문제인거 같긴 한데 여튼 뭔가 복잡하네요.;
// 일단 백준에 정답코드 넣고 돌린뒤에 맞은사람 보니깐, 이런 스타일로 푼 분들이 있네요 오오…