C 语言

关注公众号 jb51net

关闭
首页 > 软件编程 > C 语言 > C++比较函数的区别

C++中sort()函数和priority_queue容器中比较函数的区别详析

作者:魏天乐大帅哥

C++中sort()和priority_queue都能自定义比较函数,其中sort()自定义的比较函数比较好理解,priority_queue中自定义的比较函数的效果和sort()是相反的,这篇文章主要给大家介绍了关于C++中sort()函数和priority_queue容器中比较函数的区别的相关资料,需要的朋友可以参考下

前言

虽然两者第三个参数默认的都是less两者参数比较函数的区别是相反的

小细节 sort中需要传对象,得less(),priority_queue中需要传类型less即可;

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;
}

运行结果

则:

greater情况

#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;
	}
};

总结

当比较函数是x1.data<x2.data时: 等价于less

当比较函数是x1.data>x2.data时:等价于greater

他俩是反着的

到此这篇关于C++中sort()函数和priority_queue容器中比较函数的区别的文章就介绍到这了,更多相关C++比较函数的区别内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文