关于优先队列

转自: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 }

还是代码最有说服力……

posted on 2012-08-16 15:49  矮人狙击手!  阅读(189)  评论(0编辑  收藏  举报

导航