关于优先队列
转自:http://www.cnblogs.com/ffj343967016/archive/2012/07/22/2603632.html
1 #include<iostream> 2 #include<functional> 3 #include<queue> 4 #include<vector> 5 using namespace std; 6 7 8 struct cmp1 9 { 10 bool operator () (int &a, int &b) 11 { 12 return a > b ; // 从小到大排序,值 小的 优先级别高 13 } 14 }; 15 16 struct cmp2 17 { 18 bool operator () (int &a, int &b) 19 { 20 return a < b; // 从大到小 21 } 22 }; 23 24 struct number1 25 { 26 int x; 27 bool operator < (const number1 &a)const 28 { 29 return x > a.x; // 从小到大 ,x 小的 优先级别高 30 } 31 }; 32 33 struct number2 34 { 35 int x; 36 bool operator < (const number2 &a)const 37 { 38 return x < a.x; // 从大到小 ,x 大的优先级别高 39 } 40 }; 41 42 int a[] = {14,10,56,7,83,22,36,91,3,47,72,0}; 43 number1 num1[] ={14,10,56,7,83,22,36,91,3,47,72,0}; 44 number2 num2[] ={14,10,56,7,83,22,36,91,3,47,72,0}; 45 46 int main() 47 { 48 priority_queue<int>que; // 采用默认优先级构造队列 从大到小。 49 50 priority_queue<int, vector<int>, cmp1 >que1; 51 priority_queue<int, vector<int>, cmp2 >que2; 52 53 priority_queue<int, vector<int>, greater<int> > que3; //functional 头文件自带的 54 priority_queue<int, vector<int>, less<int> > que4; //functional 头文件自带的 55 56 priority_queue<number1> que5; 57 priority_queue<number2> que6; 58 59 60 int i; 61 for(i=0;a[i];i++) 62 { 63 que.push(a[i]); 64 que1.push(a[i]); 65 que2.push(a[i]); 66 que3.push(a[i]); 67 que4.push(a[i]); 68 69 } 70 71 for(i=0;num1[i].x;i++) 72 que5.push(num1[i]); 73 for(i=0;num2[i].x;i++) 74 que6.push(num2[i]); 75 76 printf("采用默认优先关系:\n(priority_queue<int>que;)\n"); 77 printf("Queue 0:\n"); 78 while(!que.empty()) 79 { 80 printf("%3d",que.top()); 81 que.pop(); 82 } 83 puts(""); 84 puts(""); 85 86 printf("采用结构体自定义优先级方式一:\n(priority_queue<int,vector<int>,cmp>que;)\n"); 87 printf("Queue 1:\n"); 88 while(!que1.empty()) 89 { 90 printf("%3d",que1.top()); 91 que1.pop(); 92 } 93 puts(""); 94 95 printf("Queue 2:\n"); 96 while(!que2.empty()) 97 { 98 printf("%3d",que2.top()); 99 que2.pop(); 100 } 101 puts(""); 102 puts(""); 103 104 printf("采用头文件\"functional\"内定义优先级:\n(priority_queue<int, vector<int>,greater<int>/less<int> >que;)\n"); 105 printf("Queue 3:\n"); 106 while(!que3.empty()) 107 { 108 printf("%3d",que3.top()); 109 que3.pop(); 110 } 111 puts(""); 112 113 printf("Queue 4 :\n"); 114 while(!que4.empty()) 115 { 116 printf("%3d",que4.top()); 117 que4.pop(); 118 } 119 puts(""); 120 puts(""); 121 122 printf("采用结构体自定义优先级方式二:\n(priority_queue<number>que)\n"); 123 printf("Queue 5:\n"); 124 while(!que5.empty()) 125 { 126 printf("%3d",que5.top()); 127 que5.pop(); 128 } 129 puts(""); 130 131 printf("Queue 6:\n"); 132 while(!que6.empty()) 133 { 134 printf("%3d",que6.top()); 135 que6.pop(); 136 } 137 138 system("pause"); 139 return 0; 140 }
还是代码最有说服力……