赞
踩
虽然两者第三个参数默认的都是less,但两者参数比较函数的区别是相反的:
小细节 sort中需要传对象,得less(),priority_queue中需要传类型less即可;
#include<iostream> #include<vector> #include<queue> using namespace std; int main() { vector<int>arr2 = {3,2,1}; sort(arr2.begin(),arr2.end(),less<int>()); //输出sort()之后的vector for (int i = 0; i < 3; i++) { cout << arr2[i] << ' '; } cout << endl; priority_queue<int,vector<int>,less<int>>arr; arr.push(3); arr.push(2); arr.push(1); //输出priority_queue while (!arr.empty()) { cout<<arr.top()<<' '; arr.pop(); } cout << endl; return 0; }
运行结果
则:
#include<iostream> #include<vector> #include<queue> using namespace std; int main() { vector<int>arr2 = {3,2,1}; sort(arr2.begin(),arr2.end(),greater<int>()); //输出sort()之后的vector for (int i = 0; i < 3; i++) { cout << arr2[i] << ' '; } cout << endl; priority_queue<int,vector<int>, greater<int>>arr; arr.push(3); arr.push(2); arr.push(1); //输出priority_queue while (!arr.empty()) { cout<<arr.top()<<' '; arr.pop(); } cout << endl; return 0; }
运行结果:
则:
sort()排序是从大到小,即greater是降序;
priority_queue是小顶堆,输出之后是从小到大,即升序;
struct cmp1 //等价于less的内部构造,效果和上面分析的less情况一样
{
opeartor()(data x1,data x2){
return x1<x2;
}
};
struct cmp2 //等价于less的内部构造,效果和上面分析的greater情况一样
{
opeartor()(data x1,data x2){
return x1>x2;
}
};
他俩是反着的
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。