priority_queueで昇順にソートして要素を取り出す

priority_queueを普通に使うと要素が降順にソートされる。

  priority_queue<int> queue;
  int data[] = {3, 1, 2, 5, 4};

  for(int i=0; i<5; i++){
    queue.push(data[i]);
  }

  while(!queue.empty()){
    cout << queue.top() << " ";
    queue.pop();
  }
  cout << endl;
% ./a.out
5 4 3 2 1

昇順にソートして要素を取り出したい場合はキューを作成するときのテンプレートにgreaterを指定すればOK。

  priority_queue<int, vector<int>, greater<int> > queue;
  int data[] = {3, 1, 2, 5, 4};

  for(int i=0; i<5; i++){
    queue.push(data[i]);
  }

  while(!queue.empty()){
    cout << queue.top() << " ";
    queue.pop();
  }
  cout << endl;
% ./a.out
1 2 3 4 5