iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++中sort()函数和priority_queue容器中比较函数的区别详析
  • 636
分享到

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

c++ 比较函数c++ sort()函数c++ priority_queue详解 2023-03-07 11:03:51 636人浏览 薄情痞子
摘要

目录前言less情况greater情况自定义比较函数情况总结前言 普通的queue是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除。priority_queue中元素被赋予

前言

  • 普通的queue是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除。
  • priority_queue中元素被赋予优先级。在创建的时候根据优先级进行了按照从大到小或者从小到大进行了自动排列(大顶堆or小顶堆)。可以以O(log n) 的效率查找一个队列中的最大值或者最小值;

虽然两者第三个参数默认的都是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;
}

运行结果

则:

  • sort()排序是从小到大,即less是升序;
  • priority_queue是大顶堆,输出之后是从大到小,即降序;

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

  • sort()最终会把序列处理成升序
  • priority_queue会处理成大根堆–>遍历输出为降序结构;

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

  • sort()最终会把序列处理成降序
  • priority_queue会处理成小根堆–>遍历输出为升序结构;

他俩是反着的

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

--结束END--

本文标题: C++中sort()函数和priority_queue容器中比较函数的区别详析

本文链接: https://www.lsjlt.com/news/198815.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作