我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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

运行结果

则:

  • 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++比较函数的区别内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

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

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

下载Word文档

猜你喜欢

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

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

C++中sort()函数和priority_queue容器的区别是什么

这篇文章主要介绍“C++中sort()函数和priority_queue容器的区别是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C++中sort()函数和priority_queue容器的区别
2023-07-05

C#中构造函数和析构函数的区别是什么

这篇文章将为大家详细讲解有关C#中构造函数和析构函数的区别是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。C#构造函数和析构函数在你可以访问一个类的方法、属性或任何其它东西之前, ***
2023-06-18

vue3中<script setup> 和 setup函数的区别对比

这篇文章主要介绍了vue3中<script setup> 和 setup函数的区别,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
2023-05-18

C语言中宏和函数的9个区别详解

C语言中的宏和函数是非常相似的,它们都可以完成类似的功能。本文为大家整理了C语言中宏和函数的9个区别,感兴趣的小伙伴可以跟随小编一起了解一下
2023-05-14

C++中成员函数和友元函数的区别有哪些

C++中成员函数和友元函数之间有以下几点区别:1. 访问权限:成员函数可以直接访问类的私有成员和保护成员,而友元函数可以在类的外部访问类的私有成员和保护成员。2. 调用方式:成员函数可以通过对象或指针调用,而友元函数可以直接调用,不需要通过
2023-08-16

详解C语言中strcpy函数与memcpy函数的区别与实现

这篇文章主要介绍了C语言中字符串拷贝函数(strcpy)与内存拷贝函数(memcpy)的不同及内存拷贝函数的模拟实现,感兴趣的小伙伴可以跟随小编一起学习一下
2022-12-29

C++ 函数中引用参数和指针参数的区别

在 c++++ 函数中,引用参数传递变量地址,对参数的修改影响原始变量,而指针参数传递指向地址的指针,对参数的修改不影响原始变量。C++ 函数中引用参数和指针参数的区别在 C++ 中,函数可以接受引用参数或指针参数。虽然两者都用于传递一个
C++ 函数中引用参数和指针参数的区别
2024-04-20

C语言中宏和函数的区别有哪些

这篇文章主要介绍了C语言中宏和函数的区别有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C语言中宏和函数的区别有哪些文章都会有所收获,下面我们一起来看看吧。C语言中的宏和函数是非常相似的,它们都可以完成类似
2023-07-05

Numpy中扁平化函数ravel()和flatten()的区别详解

本文主要介绍了Numpy中扁平化函数ravel()和flatten()的区别详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-02-20

C++中获取字符串长度的函数sizeof()、strlen()、length()、size()详解和区别(推荐)

在C++中计算长度的函数有四种,它们分别是sizeof() ,size(),strlen(),str.length(),这篇文章主要介绍了C++中获取字符串长度的函数sizeof()、strlen()、length()、size()详解和区别,需要的朋友可以参考下
2023-02-05

python 函数、变量中单下划线和双下划线的区别详解

本文主要介绍了python 函数、变量中单下划线和双下划线的区别详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-01-28

C++ 函数内存分配和销毁在容器和算法中的应用

在 c++++ 中,内存通过动态分配器(new 和 delete)进行分配和销毁,用于管理容器和算法中的内存。容器(如 vector、list 和 map)自动处理内存,使用 raii 原则进行分配和释放。算法可以使用动态分配(如归并排序)
C++ 函数内存分配和销毁在容器和算法中的应用
2024-04-22

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录