gpt4 book ai didi

c++ - 相同的比较函数为 C++ 中的排序和优先级队列提供不同的输出

转载 作者:行者123 更新时间:2023-12-02 03:24:03 25 4
gpt4 key购买 nike

我试图了解自定义比较函数在 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;
}

上述程序的输出是:

vector 排序输出:12 26 32 33 45 53 71 80优先级队列输出:80 71 53 45 33 32 26 12

最佳答案

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

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

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

关于c++ - 相同的比较函数为 C++ 中的排序和优先级队列提供不同的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53924198/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com