首页 > 其他 > 详细

优先队列

时间:2017-02-05 22:59:04      阅读:236      评论:0      收藏:0      [点我收藏+]

在优先队列中,优先级高的元素献出队列。

1.标准库默认使用元素类型的<操作符来确定他们之间的优先级关系。

优先队列的第一中用法,也是最常用的方法:

priority_queue q1;

通过<操作符可知在整数中元素大的优先级高。

2.在示例1中,如果我们要把元素从小到大输出怎么办呢?

只是我们可以传入一个比较函数,使用functional.h函数对象作为比较函数。

priority_queue<int,vector<int>,greater<int> >q2;

其中

第二个参数为容器类型。

第二个参数为比较函数。

3.自定义优先级。

struct node 

{

     friend bool operator<(node n1,node n2)

    {

          return n1.priority<n2.priority;

    }

    int priority;

    int value;

};

在该结构中,value为值,priority为优先级。
通过自定义operator<操作符来比较元素中的优先级。

但如果结构定义如下:

struct node
技术分享{
技术分享    friend bool operator> (node n1, node n2)
技术分享    {
技术分享        return n1.priority > n2.priority;
技术分享    }
技术分享    int priority;
技术分享    int value;
技术分享};

则会编译不过(G++编译器)
因为标准库默认使用元素类型的<操作符来确定它们之间的优先级关系。
而且自定义类型的<操作符与>操作符并无直接联系,故会编译不过。

 1 #include<iostream>
 2 #include<functional>
 3 #include<queue>
 4 using namespace std;
 5 struct node
 6 {
 7     friend bool operator< (node n1, node n2)
 8     {
 9         return n1.priority < n2.priority;
10     }
11     int priority;
12     int value;
13 };
14 int main()
15 {
16     const int len = 5;
17     int i;
18     int a[len] = {3,5,9,6,2};
19     //示例1
20     priority_queue<int> qi;
21     for(i = 0; i < len; i++)
22         qi.push(a[i]);
23     for(i = 0; i < len; i++)
24     {
25         cout<<qi.top()<<" ";
26         qi.pop();
27     }
28     cout<<endl;
29     //示例2
30     priority_queue<int, vector<int>, greater<int> >qi2;
31     for(i = 0; i < len; i++)
32         qi2.push(a[i]);
33     for(i = 0; i < len; i++)
34     {
35         cout<<qi2.top()<<" ";
36         qi2.pop();
37     }
38     cout<<endl;
39     //示例3
40     priority_queue<node> qn;
41     node b[len];
42     b[0].priority = 6; b[0].value = 1; 
43     b[1].priority = 9; b[1].value = 5; 
44     b[2].priority = 2; b[2].value = 3; 
45     b[3].priority = 8; b[3].value = 2; 
46     b[4].priority = 1; b[4].value = 4; 
47 
48     for(i = 0; i < len; i++)
49         qn.push(b[i]);
50     cout<<"优先级"<<\t<<""<<endl;
51     for(i = 0; i < len; i++)
52     {
53         cout<<qn.top().priority<<\t<<qn.top().value<<endl;
54         qn.pop();
55     }
56     return 0;
57 }

 

优先队列

原文:http://www.cnblogs.com/yuanbo123/p/6368601.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!