#include <queue>       // Q 또는우선순위Q를사용.
                       // 내부적으로 사용 할 container의 헤더도include 해야 한다.
#include <functional>
template<typename T, typename Cont = vector<T>, typename Pred = less<T> >
class priority_queue
{
        Pred f; // 조건자함수 객체생성
public:
        void foo()
        {
               // 크기비교가 필요하다면
               bool b = f(1, 2);
        }
};
// 절대값으로 크기를 비교하는 함수객체
template<typename T> struct abs_less
{
        bool operator()( T a, T b )
        {
               return abs(a) < abs(b);
        }
};
void main()
{
// greater<int> 는 템플릿 인자를 넘기기 때문에 타입을 넘긴다. 즉, () 를 쓰지 않는다.!!!
// 결국 단위전략의 크기 비교객체를 다양하게 활용 할 수 있다.
        // 디폴트로 vector를 사용.
        priority_queue<int, vector<int>, abs_less<int> > pq;
        pq.push(10);
        pq.push(20);
        pq.push(-50);
        pq.push(40);
        pq.push(30);
        cout << pq.top() << endl;