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

这篇具有很好参考价值的文章主要介绍了C++ sort()函数和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;
}

运行结果
C++ sort()函数和priority_queue容器中比较函数的区别
则:

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

运行结果:
C++ sort()函数和priority_queue容器中比较函数的区别

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

自定义比较函数情况

C++ sort()函数和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
  1. sort()最终会把序列处理成升序
  2. priority_queue会处理成大根堆–>遍历输出为降序结构;
  • 当比较函数是x1.data>x2.data时:等价于greater
  1. sort()最终会把序列处理成降序
  2. priority_queue会处理成小根堆–>遍历输出为升序结构;

他俩是反着的文章来源地址https://www.toymoban.com/news/detail-406453.html

到了这里,关于C++ sort()函数和priority_queue容器中比较函数的区别的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【C++】STL中的容器适配器 stack queue 和 priority_queue 的模拟实现

    适配器是一种设计模式 (设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结),该种模式是将一个类的接口转换成客户希望的另外一个接口。 例如我们常见的充电器就是一种适配器,它将我们常用的220V交流电压转化为4,5V (或者其他更高的电

    2023年04月26日
    浏览(48)
  • 容器适配器---deque和STL ---stack queue priority_queue的模拟实现 C++

    目录 一、容器适配器 deque原理 deque的缺陷 deque的优势 二、stack的模拟实现  三、queue的模拟实现 四、优先级队列的模拟实现 适配器是一种设计模式(设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结),该种模式是将一个类的接口转换成客户

    2024年02月02日
    浏览(43)
  • 【C++】详解priority_queue(优先级队列)与函数对象

    目录 一、priority_queue 的介绍和使用 1.1priority_queue 的介绍 2.2priority_queue 的使用 二、仿函数 2.1什么是仿函数 2.2仿函数的作用 三、函数对象的特点(知识点多) 3.1分析特点5(比较普通函数与函数对象) 3.1.1利用普通函数传递参数 拓展之:深度剖析函数利用模板的本质 3.1.2利用

    2024年02月08日
    浏览(30)
  • 【C++初阶】仿函数和priority_queue的模拟实现(附源码)

    仿函数,顾名思义就是 模仿函数,它其实是一个类,类里面重载了运算符() ,在调用这个重载的运算符时,让我们感觉是调用函数一样,可以说相当于C语言里的函数指针一样,但是函数指针的可读性不好,不如仿函数。 1.仿函数即使定义相同,也可能有不同的类型; 2.仿

    2024年02月16日
    浏览(25)
  • 【C++】STL使用仿函数控制优先级队列priority_queue

    本文章讲解C++STL的容器适配器:priority_queue的实现,并实现仿函数控制priority_queue底层。 priority_queue叫做优先级队列,它的底层结构是堆,在库中,默认生成的是大堆 在库的实现中,使用vector作为该优先级队列的适配容器。 由于priority_queue也是一个适配器,所以它的接口函数

    2024年02月16日
    浏览(34)
  • 【C++航海王:追寻罗杰的编程之路】priority_queue(优先队列) | 容器适配器你知道哪些?

    目录 1 - priority_queue的介绍和使用 1.1 - priority_queue的介绍 1.2 - priority_queue的使用 1.3 - priority_queue的模拟实现 2 - 容器适配器 2.1 - 什么是适配器 2.2 - STL标准库中stack和queue的底层结构 2.3 - deque的介绍 2.3.1 - deque的原理介绍 2.3.2 - deque的缺陷 2.4 - 为什么选择deque作为stack和queue的底

    2024年04月10日
    浏览(32)
  • C++ queue&priority_queue

    目录 一、介绍 二、queue使用 三、模拟实现 四、优先级队列 五、priority_queue使用 OJ题:215. 数组中的第K个最大元素 快速排序 优先级队列 TOPK 六、模拟实现priority_queue 1、仿函数 2、优先级队列类 3、测试函数 1、队列是一种容器适配器,专门用于在FIFO上下文(先进先出)中操作,

    2024年02月01日
    浏览(36)
  • C++中的queue与priority_queue

      队列是一种容器适配器,专门用于上下文先进先出的操作中。队列的特性是先进先出,从容器的一端插入,另一端提取元素。   队列作为容器适配器实现,容器适配器即将特定容器类封装作为其底层容器类,queue提供一组特定的成员函数来访问其元素。元素从队尾入队

    2024年02月04日
    浏览(34)
  • stack_queue | priority_queue | 仿函数

    栈不在是一个容器,而是一个容器适配器 , stack的模板中第二个deque暂时不知道干什么的,后面会说 说明stack是一个容器适配器,并且为了保证严格的先进后出,所以不存在迭代器 这里假设我们不认识 deque,那么如果stack频繁使用pop尾删,将vector T 设置成缺省值也是非常适合

    2024年01月16日
    浏览(29)
  • C++ STL priority_queue

    目录 一.认识priority_queue 二. priority_queue的使用 三.仿函数  1.什么是仿函数  2.控制大小堆  3.TopK问题 四.模拟实现priority_queue  1.priority_queue的主要接口框架  2.堆的向上调整算法  3.堆的向下调整算法  4.仿函数控制大小堆  五.priority_queue模拟实现整体代码和测试 priority_queue-

    2024年02月07日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包