Одинаковая функция сравнения, обеспечивающая различный вывод для очереди сортировки и приоритета в C ++ - PullRequest
0 голосов
/ 25 декабря 2018

Я пытаюсь понять, как работает пользовательская функция сравнения в STL.Я написал программу ниже и передал пользовательскую функцию в функцию сортировки STL и очередь приоритетов.Я ожидал, что оба вывода обоих будут отсортированы в порядке возрастания, но это не так.

#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
using namespace std;

struct compareStruct {
  bool operator() (int i,int j) 
  { 
    return (i<j);
  }
} compare;


int main() {

    int numbers[] = {32,71,12,45,26,80,53,33};
    vector<int> myvector (numbers, numbers+8);  
    sort (myvector.begin(), myvector.end(), compare);

    priority_queue<int, vector<int>, compareStruct> mypq;
    for(int i=0;i<8;i++)
    {
        mypq.push(numbers[i]);
    }

    cout<<"Vector Sort Output :\n";
    for (vector<int>::iterator it=myvector.begin(); it!=myvector.end(); ++it)
        cout << *it<<" ";

    cout<<"\nPriority Queue Output: \n";
    while(!mypq.empty())
    {
        cout << mypq.top()<<" ";
        mypq.pop();
    }
    return 0;
}

Вывод вышеуказанной программы:

Вывод векторных сортировок: 12 26 32 33 4553 71 80 Выход из приоритетной очереди: 80 71 53 45 33 32 26 12

1 Ответ

0 голосов
/ 25 декабря 2018

Очередь приоритетов сортируется в обратном порядке, первый из которых является наибольшим, а не самым маленьким (см. ссылка ).

Если вы хотите такой же порядок, используйте:

priority_queue<int, vector<int>, greater<int>> mypq;
...