C++ priority_queue用法

1 篇文章 0 订阅
1 篇文章 0 订阅

C++ priority_queue用法

知识标签:STL, adapter, C++

code

#include<iostream>
#include<queue>
#include<string.h>

struct node
{
    //默认比较方式
    friend bool operator<(node n1, node n2)
    {
        return n1.priority<n2.priority;
    }
    friend bool operator>(node n1, node n2)
    {
        return n1.priority>n2.priority;
    }
    int priority;
    char value[20];
};

int main(void)
{
    const int len = 5;
    int i;
    int a[len] = {3, 5, 9, 6, 2};

    //示例1
    //priority_queue<int>省略了2个参数,第二个参数为容器类型,第三个为比较方式
    //默认的容器类型为vector,本例中为vector<int>
    //比较方式默认为operator<,故默认优先队列是大顶堆
    std::priority_queue<int> qi;
    for(i = 0; i < len; ++i)
        qi.push(a[i]);
    for(i = 0; i < len; ++i)
    {
        std::cout << qi.top() << " ";
        qi.pop();
    }
    std::cout << std::endl;

    //示例2
    //STL中定义了一个仿函数greater<>,可以用它声明小顶堆
    //priority_queue根据给定的比较规则(即第三个参数)利用堆对第二个参数vector中的元素进行排序
    std::priority_queue<int, std::vector<int>, std::greater<int> > qi2;
    for(i = 0; i < len; ++i)
        qi2.push(a[i]);
    for(i = 0; i < len; ++i)
    {
        std::cout << qi2.top() << " ";
        qi2.pop();
    }
    std::cout << std::endl;

    //示例3
    std::priority_queue<node> qi3;
    node b[len];
    b[0].priority = 6; strcpy(b[0].value, "小明");
    b[1].priority = 9; strcpy(b[1].value, "小花");
    b[2].priority = 2; strcpy(b[2].value, "小李");
    b[3].priority = 8; strcpy(b[3].value, "小红");
    b[4].priority = 1; strcpy(b[4].value, "小王");

    for(i = 0; i < len; ++i)
        qi3.push(b[i]);
    for(i = 0; i < len; ++i)
    {
        std::cout << qi3.top().priority << "\t" << qi3.top().value << std::endl;
        qi3.pop();
    }

    //示例4
    std::cout << "-----------------------------" << std::endl;
    std::priority_queue<node, std::vector<node>, std::greater<node> > qi4;
    for(i = 0; i < len; ++i)
        qi4.push(b[i]);
    for(i = 0; i < len; ++i)
    {
        std::cout << qi4.top().priority << "\t" << qi4.top().value << std::endl;
        qi4.pop();
    }

    return 0;
}

结果

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值