zoukankan      html  css  js  c++  java
  • 优先队列用法

    在优先队列中,优先级高的元素先出队列。
    标准库默认使用元素类型的<操作符来确定它们之间的优先级关系。
    优先队列的第一种用法,也是最常用的用法:

    priority_queue<int> qi;

    通过<操作符可知在整数中元素大的优先级高。
    故示例1中输出结果为:9 6 5 3 2

    第二种方法:
    在示例1中,如果我们要把元素从小到大输出怎么办呢?
    这时我们可以传入一个比较函数,使用functional.h函数对象作为比较函数。

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

    其中
    第二个参数为容器类型。
    第二个参数为比较函数。
    故示例2中输出结果为:2 3 5 6 9

    第三种方法:
    自定义优先级。

    struct node
    {
        friend bool operator< (node n1, node n2)
        {
            return n1.priority < n2.priority;
        }
        int priority;
        int value;
    };

    在该结构中,value为值,priority为优先级。
    通过自定义operator<操作符来比较元素中的优先级。
    在示例3中输出结果为:
    优先级  值
    9          5
    8          2
    6          1
    2          3
    1          4
    但如果结构定义如下:

    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<<"优先级"<<'	'<<""<<endl;
    51     for(i = 0; i < len; i++)
    52     {
    53         cout<<qn.top().priority<<'	'<<qn.top().value<<endl;
    54         qn.pop();
    55     }
    56     return 0;
    57 }
    View Code
    屌丝终有逆袭日,*******。
  • 相关阅读:
    Druid 使用 Kafka 将数据载入到 Kafka
    Druid 使用 Kafka 数据加载教程——下载和启动 Kafka
    Druid 集群方式部署 —— 启动服务
    Druid 集群方式部署 —— 端口调整
    Druid 集群方式部署 —— 配置调整
    Druid 集群方式部署 —— 配置 Zookeeper 连接
    Druid 集群方式部署 —— 元数据和深度存储
    Druid 集群方式部署 —— 从独立服务器部署上合并到集群的硬件配置
    Druid 集群方式部署 —— 选择硬件
    Druid 独立服务器方式部署文档
  • 原文地址:https://www.cnblogs.com/ZhaoPengkinghold/p/3868343.html
Copyright © 2011-2022 走看看