当前位置: 首页 > news >正文

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

他俩是反着的

相关文章:

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

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

STM32开发(14)----CubeMX配置ADC

CubeMX配置ADC前言一、什么是ADC&#xff1f;二、实验过程1.单通道ADC采集STM32CubeMX配置代码实现2.多通道ADC采样(非DMA)STM32CubeMX配置代码实现3.多通道ADC采样&#xff08;DMA&#xff09;STM32CubeMX配置代码实现总结前言 本章介绍使用STM32CubeMX对ADC进行配置的方法&a…...

Simple RNN、LSTM、GRU序列模型原理

一。循环神经网络RNN 用于处理序列数据的神经网络就叫循环神经网络。序列数据说直白点就是随时间变化的数据&#xff0c;循环神经网络它能够根据这种数据推出下文结果。RNN是通过嵌含前一时刻的状态信息实行训练的。 RNN神经网络有3个变种&#xff0c;分别为Simple RNN、LSTM、…...

【原创】java+swing+mysql生肖星座查询系统设计与实现

今天我们来开发一个比较有趣的系统&#xff0c;根据生日查询生肖星座&#xff0c;输入生日&#xff0c;系统根据这个日期自动计算出生肖和星座信息反馈到界面。我们还是使用javaswingmysql去实现这样的一个系统。 功能分析&#xff1a; 生肖星座查询系统&#xff0c;顾名思义…...

CentOS 环境 OpneSIPS 3.1 版本安装及使用

文章目录1. OpenSIPS 源码下载2. 工具准备3. 编译安装4. opensips-cli 工具安装5. 启动 OpenSIPS 实例1. OpenSIPS 源码下载 使用以下命令即可下载 OpenSIPS 的源码&#xff0c;笔者下载的是比较稳定的 3.1 版本&#xff0c;读者有兴趣也可前往 官方传送门 sudo git clone htt…...

SQL95 从 Products 表中检索所有的产品名称以及对应的销售总数

描述 Products 表中检索所有的产品名称&#xff1a;prod_name、产品id&#xff1a;prod_idprod_idprod_namea0001egga0002socketsa0013coffeea0003colaOrderItems代表订单商品表&#xff0c;订单产品&#xff1a;prod_id、售出数量&#xff1a;quantityprod_idquantitya0001105…...

平时技术积累很少,面试时又会问很多这个难题怎么破?别慌,没事看看这份Java面试指南,解决你的小烦恼!

前言技术面试是每个程序员都需要去经历的事情&#xff0c;随着行业的发展&#xff0c;新技术的不断迭代&#xff0c;技术面试的难度也越来越高&#xff0c;但是对于大多数程序员来说&#xff0c;工作的主要内容只是去实现各种业务逻辑&#xff0c;涉及的技术难度并不高&#xf…...

SQL Server 数据库的备份

为何要备份数据库&#xff1f; 备份 SQL Server 数据库、在备份上运行测试还原过程以及在另一个安全位置存储备份副本可防止可能的灾难性数据丢失。 备份是保护数据的唯一方法 。 使用有效的数据库备份&#xff0c;可从多种故障中恢复数据&#xff0c;例如&#xff1a; 介质…...

NCNN Conv量化详解1

1. NCNN的Conv量化计算流程 正常的fp32计算中,一个Conv的计算流程如下: 在NCNN Conv进行Int8计算时,计算流程如下: NCNN首先将输入(bottom_blob)和权重(weight_blob)量化成INT8,在INT8下计算卷积,然后反量化到fp32,再和未量化的bias相加,得到输出(top_blob) 输入和…...

Redis大key多key拆分方案

业务场景中经常会有各种大key多key的情况&#xff0c; 比如&#xff1a;1&#xff1a;单个简单的key存储的value很大2&#xff1a;hash&#xff0c; set&#xff0c;zset&#xff0c;list 中存储过多的元素&#xff08;以万为单位&#xff09;3&#xff1a;一个集群存储了上亿的…...

python的类如何使用?兔c同学一篇关于python类的博文概述

本章内容如目录 所示&#xff1a; 文章目录1. 创建和使用类1.1 创建第一个python 类1.2 版本差异1.3 根据类创建实例1. 访问属性2. 调用方法3. 创建多个实例2. 使用类和实例2.1 给属性指定默认值2.2 修改属性的值3. 继承3.1 子类的 __init __()3.2 给子类定义属性和方法3.3 重写…...

Day60 动态规划总结

647. 回文子串 回文的做法注定我们得从里面入手&#xff0c;逐渐扩散到边界 初始化&#xff1a;准备一个ans&#xff0c;找到一个回文子串加一个 dp [[0] * n for _ in range(n)]ans 0 遍历公式&#xff1a; 当s[i]s[j]的时候&#xff0c;只要里面还是回文串&#xff0c;就能…...

UVM仿真环境搭建

环境 本实验使用环境为&#xff1a; Win10平台下的Modelsim SE-64 2019.2 代码 dut代码&#xff1a; module dut(clk,rst_n, rxd,rx_dv,txd,tx_en); input clk; input rst_n; input[7:0] rxd; input rx_dv; output [7:0] txd; output tx_en;reg[7:0] txd; reg tx_en;always…...

Azure AI基础到实战(C#2022)-认知服务(1)

目录 Azure 认知服务概述计算机视觉概述数据隐私和安全性计算机视觉快速入门光学字符识别 (OCR)OCR APIOCR 常用功能Azure 门户准备两种部署方式OCR项目实战之车牌识别Azure 认知服务概述 Azure 认知服务是基于云的人工智能 (AI) 服务,可帮助开发人员在不具备直接的 AI 或数据…...

光栅化Triangles(笔记)

field of view (可见区域) 该角度越大,需要透视投影的角度越大,成像显示的内容越多 有Y值,则可得出成像范围 屏幕: 典型的光栅处理设备所有像素都被表示为x,y坐标轴形式 3D方块成像步骤: 先将其所在平面化为 与屏幕等长等宽的形式: 如何将一个三角形拆成像素&#xff1f;采样…...

【Oarcle】如何显示日本年号的日期格式 ?

语句大于一切&#xff0c;还需要语言吗&#xff1f; 1. SELECT TO_CHAR(SYSDATE,EEYY/MM/DD,NLS_CALENDAR JAPANESE IMPERIAL) from dual;结果是&#xff1a; 令和05/02/25 Oracle SQL文中&#xff0c;年月日的显示&#xff0c;一定要使用双引号括起来&#xff0c;如 select…...

57_Pandas中的json_normalize将字典列表转换为DataFrame

57_Pandas中的json_normalize将字典列表转换为DataFrame 可以使用 pandas.json_normalize() 将具有公共键的字典列表转换为 pandas.DataFrame。 由于它是一种常用的JSON格式&#xff0c;可以通过Web API获取&#xff0c;所以能够将其转换为pandas.DataFrame是非常方便的。 在…...

OpenAPI SDK组件之javassist字节码

javassist介绍 Javassist是一个开源的分析、编辑和创建Java字节码的类库&#xff0c;主要优点是简单&#xff0c;不需要了解虚拟机指令&#xff0c;就能动态改变类的结构&#xff0c;或者动态生成类。 apisdk应用javassist 在apisdk中主要依靠javassist增强开发者声明的开放…...

【LeetCode】1247. 交换字符使得字符串相同(超级简单的算法,击败100%)

有两个长度相同的字符串 s1 和 s2&#xff0c;且它们其中 只含有 字符 "x" 和 "y"&#xff0c;你需要通过「交换字符」的方式使这两个字符串相同。 每次「交换字符」的时候&#xff0c;你都可以在两个字符串中各选一个字符进行交换。 交换只能发生在两个…...

23. 合并K个升序链表

解题思路&#xff1a;两种解法&#xff0c;一种优先级队列&#xff0c;一种分治优先级队列解法&#xff1a;以节点中存储的值进行排序依次遍历所有的链表&#xff0c;把链表中的节点加入到优先级队列中依次从优先级队列的弹出并删除最小的元素加入到新的链表中&#xff0c;直到…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合

强化学习&#xff08;Reinforcement Learning, RL&#xff09;是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程&#xff0c;然后使用强化学习的Actor-Critic机制&#xff08;中文译作“知行互动”机制&#xff09;&#xff0c;逐步迭代求解…...

Appium+python自动化(十六)- ADB命令

简介 Android 调试桥(adb)是多种用途的工具&#xff0c;该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具&#xff0c;其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利&#xff0c;如安装和调试…...

Mac软件卸载指南,简单易懂!

刚和Adobe分手&#xff0c;它却总在Library里给你写"回忆录"&#xff1f;卸载的Final Cut Pro像电子幽灵般阴魂不散&#xff1f;总是会有残留文件&#xff0c;别慌&#xff01;这份Mac软件卸载指南&#xff0c;将用最硬核的方式教你"数字分手术"&#xff0…...

Swagger和OpenApi的前世今生

Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章&#xff0c;二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑&#xff1a; &#x1f504; 一、起源与初创期&#xff1a;Swagger的诞生&#xff08;2010-2014&#xff09; 核心…...

springboot整合VUE之在线教育管理系统简介

可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生&#xff0c;小白用户&#xff0c;想学习知识的 有点基础&#xff0c;想要通过项…...

FFmpeg:Windows系统小白安装及其使用

一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】&#xff0c;注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录&#xff08;即exe所在文件夹&#xff09;加入系统变量…...

给网站添加live2d看板娘

给网站添加live2d看板娘 参考文献&#xff1a; stevenjoezhang/live2d-widget: 把萌萌哒的看板娘抱回家 (ノ≧∇≦)ノ | Live2D widget for web platformEikanya/Live2d-model: Live2d model collectionzenghongtu/live2d-model-assets 前言 网站环境如下&#xff0c;文章也主…...

【Linux】自动化构建-Make/Makefile

前言 上文我们讲到了Linux中的编译器gcc/g 【Linux】编译器gcc/g及其库的详细介绍-CSDN博客 本来我们将一个对于编译来说很重要的工具&#xff1a;make/makfile 1.背景 在一个工程中源文件不计其数&#xff0c;其按类型、功能、模块分别放在若干个目录中&#xff0c;mak…...

SpringAI实战:ChatModel智能对话全解

一、引言&#xff1a;Spring AI 与 Chat Model 的核心价值 &#x1f680; 在 Java 生态中集成大模型能力&#xff0c;Spring AI 提供了高效的解决方案 &#x1f916;。其中 Chat Model 作为核心交互组件&#xff0c;通过标准化接口简化了与大语言模型&#xff08;LLM&#xff0…...

C# winform教程(二)----checkbox

一、作用 提供一个用户选择或者不选的状态&#xff0c;这是一个可以多选的控件。 二、属性 其实功能大差不差&#xff0c;除了特殊的几个外&#xff0c;与button基本相同&#xff0c;所有说几个独有的 checkbox属性 名称内容含义appearance控件外观可以变成按钮形状checkali…...