1: #include<stdio.h>
2: #include<functional>
3: #include<queue>
4: #include<vector>
5: using namespace std;
6: //定义结构,使用运算符重载,自定义优先级1
7: struct cmp1{ 8: bool operator ()(int &a,int &b){ 9: return a>b;//最小值优先
10: }
11: };
12: struct cmp2{ 13: bool operator ()(int &a,int &b){ 14: return a<b;//最大值优先
15: }
16: };
17: //定义结构,使用运算符重载,自定义优先级2
18: struct number1{ 19: int x;
20: bool operator < (const number1 &a) const { 21: return x>a.x;//最小值优先
22: }
23: };
24: struct number2{ 25: int x;
26: bool operator < (const number2 &a) const { 27: return x<a.x;//最大值优先
28: }
29: };
30: int a[]={14,10,56,7,83,22,36,91,3,47,72,0}; 31: number1 num1[]={14,10,56,7,83,22,36,91,3,47,72,0}; 32: number2 num2[]={14,10,56,7,83,22,36,91,3,47,72,0}; 33:
34: int main()
35: { priority_queue<int>que;//采用默认优先级构造队列 36:
37: priority_queue<int,vector<int>,cmp1>que1;//最小值优先
38: priority_queue<int,vector<int>,cmp2>que2;//最大值优先
39:
40: priority_queue<int,vector<int>,greater<int> >que3;//注意“>>”会被认为错误,
41: //这是右移运算符,所以这里用空格号隔开
42: priority_queue<int,vector<int>,less<int> >que4;////最大值优先
43:
44: priority_queue<number1>que5;
45: priority_queue<number2>que6;
46:
47: int i;
48: for(i=0;a[i];i++){ 49: que.push(a[i]);
50: que1.push(a[i]);
51: que2.push(a[i]);
52: que3.push(a[i]);
53: que4.push(a[i]);
54: }
55: for(i=0;num1[i].x;i++)
56: que5.push(num1[i]);
57: for(i=0;num2[i].x;i++)
58: que6.push(num2[i]);
59:
60:
61: printf("采用默认优先关系:/n(priority_queue<int>que;)/n"); 62: printf("Queue 0:/n"); 63: while(!que.empty()){ 64: printf("%3d",que.top()); 65: que.pop();
66: }
67: puts(""); 68: puts(""); 69:
70: printf("采用结构体自定义优先级方式一:/n(priority_queue<int,vector<int>,cmp>que;)/n"); 71: printf("Queue 1:/n"); 72: while(!que1.empty()){ 73: printf("%3d",que1.top()); 74: que1.pop();
75: }
76: puts(""); 77: printf("Queue 2:/n"); 78: while(!que2.empty()){ 79: printf("%3d",que2.top()); 80: que2.pop();
81: }
82: puts(""); 83: puts(""); 84: printf("采用头文件/"functional/"内定义优先级:/n(priority_queue<int,vector<int>,greater<int>/less<int> >que;)/n"); 85: printf("Queue 3:/n"); 86: while(!que3.empty()){ 87: printf("%3d",que3.top()); 88: que3.pop();
89: }
90: puts(""); 91: printf("Queue 4:/n"); 92: while(!que4.empty()){ 93: printf("%3d",que4.top()); 94: que4.pop();
95: }
96: puts(""); 97: puts(""); 98: printf("采用结构体自定义优先级方式二:/n(priority_queue<number>que)/n"); 99: printf("Queue 5:/n"); 100: while(!que5.empty()){ 101: printf("%3d",que5.top()); 102: que5.pop();
103: }
104: puts(""); 105: printf("Queue 6:/n"); 106: while(!que6.empty()){ 107: printf("%3d",que6.top()); 108: que6.pop();
109: }
110: puts(""); 111: return 0;
112: }
113: /*
114: 运行结果 :
115: 采用默认优先关系:
116: (priority_queue<int>que;)
117: Queue 0:
118: 91 83 72 56 47 36 22 14 10 7 3
119:
120: 采用结构体自定义优先级方式一:
121: (priority_queue<int,vector<int>,cmp>que;)
122: Queue 1:
123: 3 7 10 14 22 36 47 56 72 83 91
124: Queue 2:
125: 91 83 72 56 47 36 22 14 10 7 3
126:
127: 采用头文件"functional"内定义优先级:
128: (priority_queue<int,vector<int>,greater<int>/less<int> >que;)
129: Queue 3:
130: 3 7 10 14 22 36 47 56 72 83 91
131: Queue 4:
132: 91 83 72 56 47 36 22 14 10 7 3
133:
134: 采用结构体自定义优先级方式二:
135: (priority_queue<number>que)
136: Queue 5:
137: 3 7 10 14 22 36 47 56 72 83 91
138: Queue 6:
139: 91 83 72 56 47 36 22 14 10 7 3
140: */