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

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

(转)C++优先队列中元素及结构体的排序⽂章转⾃:
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>
50using namespace std;
51
52//定义⽐较结构
53struct cmp1
54{
55bool operator ()(int &a,int &b)
56 {
57return a>b;//最⼩值优先
58 }
59};
60
61struct cmp2
62{
63bool operator ()(int &a,int &b)
64 {
65return a<b;//最⼤值优先
66 }
68
69//⾃定义数据结构
70struct number1
71{
72int x;
73bool operator < (const number1 &a) const
74 {
75return x>a.x;//最⼩值优先
76 }
77};
78struct number2
79{
80int x;
81bool operator < (const number2 &a) const
82 {
83return x<a.x;//最⼤值优先
84 }
85};
86int 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
90int 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
103int i;
104for(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 }
112for(i=0; num1[i].x; i++)
113 que5.push(num1[i]);
114for(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");
120while(!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");
130while(!que1.empty())
131 {
132 printf("%3d",que1.top());
133 que1.pop();
134 }
135 puts("");
136 printf("Queue 2:\n");
137while(!que2.empty())
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");
146while(!que3.empty())
147 {
148 printf("%3d",que3.top());
149 que3.pop();
150 }
151 puts("");
152 printf("Queue 4:\n");
153while(!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");
162while(!que5.empty())
163 {
164 printf("%3d",que5.top());
165 que5.pop();
166 }
167 puts("");
168 printf("Queue 6:\n");
169while(!que6.empty())
170 {
171 printf("%3d",que6.top());
172 que6.pop();
173 }
174 puts("");
175return0;
176}
177/*
178运⾏结果:
179采⽤默认优先关系:
180(priority_queue<int>que;)
181Queue 0:
18283 72 56 47 36 22 14 10 7 3
183
184采⽤结构体⾃定义优先级⽅式⼀:
185(priority_queue<int,vector<int>,cmp>que;)
186Queue 1:
187 7 10 14 22 36 47 56 72 83 91
188Queue 2:
18983 72 56 47 36 22 14 10 7 3
190
191采⽤头⽂件"functional"内定义优先级:
192(priority_queue<int,vector<int>,greater<int>/less<int> >que;)
193Queue 3:
194 7 10 14 22 36 47 56 72 83 91
195Queue 4:
19683 72 56 47 36 22 14 10 7 3
197
198采⽤结构体⾃定义优先级⽅式⼆:
199(priority_queue<number>que)
200Queue 5:
201 7 10 14 22 36 47 56 72 83 91
202Queue 6:
20383 72 56 47 36 22 14 10 7 3
204*/。

相关文档
最新文档