相同的比较功能为C++中的排序和优先级队列提供不同的输出



我试图了解自定义比较函数在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 45 53 71 80优先级队列输出:80 71 53 45 33 32 26 12

优先级队列以相反的顺序排序,第一个是最大的,而不是最小的(请参阅参考)。

如果您想要相同的顺序,请使用:

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

最新更新