
#include <cstdlib>
#include <iostream>
#include <queue>

using namespace std;

class Item {		
private:
  int key;
  char elem;
public:
  Item(int k, char e): key(k), elem(e){};
  char element() { return elem; }
  int getKey() const {return key;}
  char getElement()const { return elem; }

  void setKey(int k) { key = k; }

  void setElement( char  e) { elem = e; }

  bool operator< (const Item& n) const {
    return key < n.key ;
  }

};


int main()
{
  priority_queue<Item > pq;
  //priority_queue<Item, vector<Item>, greater<Item> > pq;
  // gives priority queue in reverse order
  pq.push(Item(5,'A'));
  pq.push(Item(5,'C'));
  pq.push(Item(9,'Z'));
  pq.push(Item(4,'B'));
  cout << pq.top().getKey();
  pq.pop();
  pq.push(Item(6,'D'));
  pq.push(Item(1,'F'));
  pq.push(Item(11,'D'));
  pq.pop();
  cout << pq.top().getElement();
  if (pq.size() > pq.top().getKey())
    cout << pq.top().getKey() << endl;
  else
    cout << pq.size() << endl;

  return EXIT_SUCCESS;

}

