zz STL 优先队列

   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: */
posted on 2012-03-14 14:36  bovine  阅读(828)  评论(0编辑  收藏  举报