priority_queue
Initialization
#include <iostream>
#include <functional>
#include <queue>

int main(int argc, char *argv[])
{
	std::priority_queue<int> q;//use the default underlying structure
	q.push(1);
	q.push(2);
	std::cout<<"Top: "<<q.top()<<std::endl;//2

	std::priority_queue<int, std::vector<int>, std::less<int>> q2;
	q2.push(3);
	q2.push(4);
	std::cout<<"Top: "<<q2.top()<<std::endl;//4

	return 0;
}
			
Priority_Queue with Objects
//Rectangle.h
#ifndef RECTANGLE_H
#define RECTANGLE_H
class Rectangle
{
	private:
		double width;
		double length;
	public:
		//constructor
		Rectangle(){}
		Rectangle(double w, double l):width(w), length(l){}

		//accessor
		double getWidth() const;
		double getLength() const;
		double getArea() const;

		//mutator
		void setWidth(double w);
		void setLength(double l);

		//operator
		bool operator<(const Rectangle &right) const
		{
			if(getArea() < right.getArea())
				return true;
			else
				return false;
		}
};
#endif

//Rectangle.cpp
#include "Rectangle.h"

double Rectangle::getWidth() const
{
	return width;
}

double Rectangle::getLength() const
{
	return length;
}

double Rectangle::getArea() const
{
	return width*length;
}

void Rectangle::setWidth(double w)
{
	width = w;
}

void Rectangle::setLength(double l)
{
	length = l;
}

//main.cpp
#include <iostream>
#include <functional>
#include <queue>
#include "Rectangle.h"

int main(int argc, char *argv[])
{
	std::priority_queue<Rectangle> q;//use the default underlying structure
	q.push(Rectangle(1, 2));
	q.push(Rectangle(2, 3));

	std::cout<<q.top().getArea()<<std::endl;//6

	return 0;
}
			
//Rectangle.h
#ifndef RECTANGLE_H
#define RECTANGLE_H
class Rectangle
{
	private:
		double width;
		double length;
	public:
		//constructor
		Rectangle(){}
		Rectangle(double w, double l):width(w), length(l){}

		//accessor
		double getWidth() const;
		double getLength() const;
		double getArea() const;

		//mutator
		void setWidth(double w);
		void setLength(double l);
};
#endif

//Rectangle.cpp
#include "Rectangle.h"

double Rectangle::getWidth() const
{
	return width;
}

double Rectangle::getLength() const
{
	return length;
}

double Rectangle::getArea() const
{
	return width*length;
}

void Rectangle::setWidth(double w)
{
	width = w;
}

void Rectangle::setLength(double l)
{
	length = l;
}

//main.cpp
#include <iostream>
#include <functional>
#include <queue>
#include <vector>
#include "Rectangle.h"

struct Comparison
{
	bool operator()(const Rectangle &a, const Rectangle &b) const
	{
		return (a.getArea() < b.getArea());
	}
};

int main(int argc, char *argv[])
{
	std::priority_queue<Rectangle, std::vector<Rectangle>, Comparison> q;//use the default underlying structure
	q.push(Rectangle(1, 2));
	q.push(Rectangle(2, 3));

	std::cout<<q.top().getArea()<<std::endl;//6

	return 0;
}
		
Reference