文章转自:smile_kai的博客

  1 /*使用标准库的栈*/
  2
  3 #include <stack>    //头文件
  4
  5 stack<int> s;      //定义一个 int 型的栈
  6
  7 s.empty()       //如果栈为空返回true,否则返回false
  8 s.size()           //返回栈中元素的个数
  9 s.pop()           //删除栈顶元素但不返回其值
 10 s.top()            //返回栈顶的元素,但不删除该元素
 11 s.push()          //在栈顶压入新元素
 12
 13
 14
 15 /*使用标准库的队列*/
 16
 17 #include <queue>  //头文件
 18
 19 queue<int> q;      //定义一个 int 型的队列
 20
 21 q.empty()       //如果队列为空返回true,否则返回false
 22 q.size()           //返回队列中元素的个数
 23 q.pop()           //删除队列首元素但不返回其值
 24 q.front()         //返回队首元素的值,但不删除该元素
 25 q.push()          //在队尾压入新元素
 26 q.back()          //返回队列尾元素的值,但不删除该元素
 27
 28
 29
 30 /*优先队列*/
 31
 32
 33 /*优先级队列支持的操作*/
 34
 35 q.empty()          //如果队列为空,则返回true,否则返回false
 36 q.size()              //返回队列中元素的个数
 37 q.pop()              //删除队首元素,但不返回其值
 38 q.top()               //返回具有最高优先级的元素值,但不删除该元素
 39 q.push(item)      //在基于优先级的适当位置插入新元素
 40
 41
 42 /*以下为优先队列的测试代码*/
 43
 44 #include<iostream>
 45 #include<functional>
 46 #include <cstdio>
 47 #include <cstdlib>
 48 #include<queue>
 49 #include<vector>
 50 using namespace std;
 51
 52 //定义比较结构
 53 struct cmp1
 54 {
 55     bool operator ()(int &a,int &b)
 56     {
 57         return a>b;//最小值优先
 58     }
 59 };
 60
 61 struct cmp2
 62 {
 63     bool operator ()(int &a,int &b)
 64     {
 65         return a<b;//最大值优先
 66     }
 67 };
 68
 69 //自定义数据结构
 70 struct number1
 71 {
 72     int x;
 73     bool operator < (const number1 &a) const
 74     {
 75         return x>a.x;//最小值优先
 76     }
 77 };
 78 struct number2
 79 {
 80     int x;
 81     bool operator < (const number2 &a) const
 82     {
 83         return x<a.x;//最大值优先
 84     }
 85 };
 86 int a[]= {14,10,56,7,83,22,36,91,3,47,72,0};
 87 number1 num1[]= {14,10,56,7,83,22,36,91,3,47,72,0};
 88 number2 num2[]= {14,10,56,7,83,22,36,91,3,47,72,0};
 89
 90 int main()
 91 {
 92     priority_queue<int>que;//采用默认优先级构造队列
 93
 94     priority_queue<int,vector<int>,cmp1>que1;//最小值优先
 95     priority_queue<int,vector<int>,cmp2>que2;//最大值优先
 96
 97     priority_queue<int,vector<int>,greater<int> >que3;//注意“>>”会被认为错误,在编译器中添加命令:-std=c++11(C++11以后的版本不强制要求添加空格)
 98     priority_queue<int,vector<int>,less<int> >que4;////最大值优先
 99
100     priority_queue<number1>que5; //最小优先级队列
101     priority_queue<number2>que6;  //最大优先级队列
102
103     int i;
104     for(i=0; a[i]; i++)
105     {
106         que.push(a[i]);
107         que1.push(a[i]);
108         que2.push(a[i]);
109         que3.push(a[i]);
110         que4.push(a[i]);
111     }
112     for(i=0; num1[i].x; i++)
113         que5.push(num1[i]);
114     for(i=0; num2[i].x; i++)
115         que6.push(num2[i]);
116
117
118     printf("采用默认优先关系:\n(priority_queue<int>que;)\n");
119     printf("Queue 0:\n");
120     while(!que.empty())
121     {
122         printf("%3d",que.top());
123         que.pop();
124     }
125     puts("");
126     puts("");
127
128     printf("采用结构体自定义优先级方式一:\n(priority_queue<int,vector<int>,cmp>que;)\n");
129     printf("Queue 1:\n");
130     while(!que1.empty())
131     {
132         printf("%3d",que1.top());
133         que1.pop();
134     }
135     puts("");
136     printf("Queue 2:\n");
137     while(!que2.empty())
138     {
139         printf("%3d",que2.top());
140         que2.pop();
141     }
142     puts("");
143     puts("");
144     printf("采用头文件\"functional\"内定义优先级:\n(priority_queue<int,vector<int>,greater<int>/less<int> >que;)\n");
145     printf("Queue 3:\n");
146     while(!que3.empty())
147     {
148         printf("%3d",que3.top());
149         que3.pop();
150     }
151     puts("");
152     printf("Queue 4:\n");
153     while(!que4.empty())
154     {
155         printf("%3d",que4.top());
156         que4.pop();
157     }
158     puts("");
159     puts("");
160     printf("采用结构体自定义优先级方式二:\n(priority_queue<number>que)\n");
161     printf("Queue 5:\n");
162     while(!que5.empty())
163     {
164         printf("%3d",que5.top());
165         que5.pop();
166     }
167     puts("");
168     printf("Queue 6:\n");
169     while(!que6.empty())
170     {
171         printf("%3d",que6.top());
172         que6.pop();
173     }
174     puts("");
175     return 0;
176 }
177 /*
178 运行结果 :
179 采用默认优先关系:
180 (priority_queue<int>que;)
181 Queue 0:
182 83 72 56 47 36 22 14 10  7  3
183
184 采用结构体自定义优先级方式一:
185 (priority_queue<int,vector<int>,cmp>que;)
186 Queue 1:
187  7 10 14 22 36 47 56 72 83 91
188 Queue 2:
189 83 72 56 47 36 22 14 10  7  3
190
191 采用头文件"functional"内定义优先级:
192 (priority_queue<int,vector<int>,greater<int>/less<int> >que;)
193 Queue 3:
194  7 10 14 22 36 47 56 72 83 91
195 Queue 4:
196 83 72 56 47 36 22 14 10  7  3
197
198 采用结构体自定义优先级方式二:
199 (priority_queue<number>que)
200 Queue 5:
201  7 10 14 22 36 47 56 72 83 91
202 Queue 6:
203 83 72 56 47 36 22 14 10  7  3
204 */

转载于:https://www.cnblogs.com/evidd/articles/7421241.html

(转)C++优先队列中元素及结构体的排序相关推荐

  1. Swift 中枚举、结构体、类(enum、struct、class)

    Swift 中枚举.结构体.类(enum.struct.class) Swift中的枚举与OC相比不会自动分配初始值,值的类型不会限定为整数,可以给定关联值类型和具体值(整型.浮点型.字符型(Swif ...

  2. linux中c语言结构体详解,Linux C语言结构体-学习笔记

    Linux C语言结构体简介 前面学习了c语言的基本语法特性,本节进行更深入的学习. 预处理程序. 编译指令: 预处理, 宏定义, 建立自己的数据类型:结构体,联合体,动态数据结构 c语言表达式工具 ...

  3. C++中的结构体vector排序详解

    C++中的结构体vector排序详解 使用sort函数对一个vector很常用,前提是通文件中必须包含#include ,但是针对结构体vector排序则需要进行一定的改动.具体事例如下所示: // ...

  4. 函数体中定义的结构体和类型

    源代码: 1 #include <stdio.h> 2 struct smonth // point 1 3 { 4 int a; 5 int b; 6 }; 7 8 int func1( ...

  5. Python中定义(声明)结构体

    文章目录 前言 实现 前言 在Python中并无像C/C++那样的结构体类型,但是由于Python是用C编写而来的,很多东西可以互通. Python是有struct模块,但并非是用于处理一般结构体的, ...

  6. soap协议中的soap结构体

    soup协议中的soap结构体 struct SOAP_STD_API soap { short state; /* 0 = uninitialized, 1 = initialized, 2 = c ...

  7. Java中如何实现结构体?如何对结构体进行排序?

    ***今天在做老师布置的编程题时,遇到了本题.感觉这道题如果用C++来解决的话,用结构体比较好吧!哈哈哈,可能还有其他的好方法,但我目前想到的是用结构体来解决比较合理.Java中有结构体吗?如果有,它 ...

  8. C语言 · 运用结构体的排序方法

    AllSight C语言 · 运用结构体的排序方法 之前遇到排序只想着最原始的方法,诸如冒泡,选择,快速排序等等,刚刚跟大牛学会了结构体的方法来排序,这样的话以后再也不用怕成绩统计.名次排序之类的题目 ...

  9. BUAA(2021春)空闲空间合并(期末考试模拟题)——结构体二级排序

    BUAA数据结构期末模拟题--空闲空间合并 看前须知 考试回顾 题目内容 问题描述 输入形式 输出形式 样例 样例说明 题解 思考和详解 参考代码 看前须知 要点介绍和简要声明. 考试回顾 格式控制输 ...

最新文章

  1. 51NOD 2072 装箱问题 背包问题 01 背包 DP 动态规划
  2. Coursera自动驾驶课程第9讲:Visual Features Detection Description and Matching
  3. Linux命令整理 —— vi 和 vim 编辑器
  4. 怎么通过java去调用并执行shell脚本以及问题总结
  5. vim编辑器使用详解
  6. asp.net页面生命周期之页面的终结阶段
  7. 【深入理解JS核心技术】3. 调用、应用和绑定有什么区别
  8. ITIL4-foundation学习和考试心得
  9. 【STM32】STM32CubeMX使用FreeRTOS教程1----定时器学习
  10. Python学习视频教程大全
  11. 2022年,美股将要上市的巨头能否逃过破发命运?
  12. 认知系列1:认知是什么
  13. sys.stdout.write()用法
  14. 人口流向逆转带来什么变化(zz)
  15. sqli-labs 1~4 多命通关攻略
  16. win10定时关机c语言,win10系统通过命令实现定时关机的操作方法
  17. nginx静态资源缓存和gzip压缩
  18. 去广外读计算机类还是去广大,广财会计学专业很受考生青睐
  19. qt助手服务器超时,qt助手安装与使用教程
  20. QObject::moveToThread: Current thread (0x5651ebdaa180) is not the object’s thread (0x5651eba7e2a0).

热门文章

  1. GridView 通用分页
  2. 在ASP.NET 3.5中使用新的ListView控件(5)
  3. Baum-WELCH和vertibe解码算法
  4. leetcode —— 区间加法
  5. 服务连接不上nacos集群_Rust 微服务实践: 连接 rust , nacos , spring cloud
  6. ContextMap详解
  7. c++椭圆最小二乘法原理_c++ 椭圆拟合之最小二乘法(图像处理)
  8. mysql 执行存储过程_MySQL存储过程的3种循环
  9. mysql 5.7.17 x86_Windows(x86,64bit)升级MySQL 5.7.17免安装版的详细教程
  10. 数学不好的人可以学python吗_数学不好的人,适合学习深度学习,机器学习,人工智能吗?...