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

C++ sort与优先队列排序的区别

  int main() {vector<int> data{3, 1, 2};cout << "从小到大排序" << endl;sort(data.begin(), data.end(), std::less<int>());printContainer(data);auto cmp1 = [](int x, int y) { return x < y; };sort(data.begin(), data.end(), cmp1);printContainer(data);cout << "从大到小排序" << endl;sort(data.begin(), data.end(), std::greater<int>());printContainer(data);auto cmp2 = [](int x, int y) { return x > y; };sort(data.begin(), data.end(), cmp2);printContainer(data);cout << "大顶堆" << endl;priority_queue<int, vector<int>, std::less<int>> heap1(data.begin(), data.end());printHeapOrStack(heap1);priority_queue<int, vector<int>, decltype(cmp1)> heap2(data.begin(), data.end());printHeapOrStack(heap2);cout << "小顶堆" << endl;priority_queue<int, vector<int>, std::greater<int>> heap3(data.begin(), data.end());printHeapOrStack(heap3);priority_queue<int, vector<int>, decltype(cmp2)> heap4(data.begin(), data.end());printHeapOrStack(heap4);
}

输出结果:

从小到大排序
1    2    3    
1    2    3    
从大到小排序
3    2    1    
3    2    1    
大顶堆
3    2    1    
3    2    1    
小顶堆
1    2    3    
1    2    3    

可以看到:std::sort 与 优先队列的排序规则刚好相反。

另外:本文使用的一些辅助打印容器函数备忘:

template<typename Container>
void printContainer(const Container &container) {for (const auto &item: container) {std::cout << item << "\t";}std::cout << std::endl;
}template<typename Container>
void printHeapOrStack(const Container &heap) {Container heapCopy = heap;while (!heapCopy.empty()) {std::cout << heapCopy.top() << "\t";heapCopy.pop();}std::cout << std::endl;
}template <typename MapType>
void printMap(const MapType& container) {for (const auto& item : container) {std::cout << item.first << ": " << item.second << "\t";}std::cout << std::endl;
}template <typename QueueType>
void printQueue(const std::queue<QueueType>& q) {std::queue<QueueType> qCopy = q;while (!qCopy.empty()) {std::cout << qCopy.front() << "\t";qCopy.pop();}std::cout << std::endl;
}

http://www.lryc.cn/news/137935.html

相关文章:

  • 【Rust】Rust学习 第十九章高级特征
  • C++ 纯虚函数和虚函数的区别
  • Go中的有限状态机FSM的详细介绍 _
  • Python入门教程 | Python3 基本数据类型
  • STM32移植u8g2玩转oled 用软件iic实现驱动oled
  • C++ 学习系列 -- string 实现
  • C语言小练习(三)
  • 2023 js逆向爬虫 有道翻译 代码
  • 【物联网无线通信技术】NFC从理论到实践(FM17XX)
  • Python爬虫猿人学逆向系列——第六题
  • idea使用tomcat
  • 搭建Tomcat HTTP服务:在Windows上实现外网远程访问的详细配置与设置教程
  • Java学习笔记——继承(包括this,super的使用总结)
  • Android 获取应用sha1和sha256
  • c# 方法参数修饰符(out、ref、in)的区别
  • shell 编写一个带有进度条的程序安装脚本
  • 服务器数据恢复-AIX PV完整镜像方法以及误删LV的数据恢复方案
  • 首席执行官Adam Selipsky解读“亚马逊云科技的技术产品差异化”
  • C++ Day3
  • OpenEuler 安装mysql
  • [Docker] Windows 下基于WSL2 安装
  • (未完成)【Spring专题】SringAOP底层原理解析——阶段三(AOP)
  • 使用Nodejs创建简单的HTTP服务器,借助内网穿透工具实现公网访问的方法分享
  • 使用 OpenTelemetry 构建可观测性 03 - 导出
  • Pyqt5打开电脑摄像头进行拍照
  • Flowable 7.0.0.M2 版本功能
  • 【golang】关于指针的有限操作
  • ProGuard + SpringBoot3 + JDK17
  • Kafka面试
  • Amazon CloudFront 部署小指南(六)- Lambda@Edge 基础与诊断