priority_queue操作

优先队列和堆的操作基本相同。优先队列只不过比堆多了一个接口,就是获得优先级最高的值。位于堆顶的元素一般是优先级别最高的,而且插入数据需要重新排列的复杂度为O(lgn)。

#include <iostream>
#include <queue>
#include <vector>
using namespace std;
#include <cstdio>
#include <cstring>
struct cmp
{
    int operator ()(char a,char b)
   {
      return a>b;
   }
};
struct node
{
    //char a[10];
    string a;
    string c;
    int b;
    friend bool operator < (node x,node y)
    //注意到:结构体中重载的运算符只可以是 <, 因为标准库默认使用元素类型的 < 操作符来确定它们之间的优先级关系,如果重载 > ,那么会编译错误。
    {
        //return x.b<y.b;//大值优先
        if(x.a==y.a)
           {
               if(x.c==y.c)
                return x.b>y.b;
               return x.c>y.c;
           }
         return x.a>y.a;
    }
};
int main()
{
    //priority_queue<int> p;
    /*priority_queue<char,vector<char>,cmp> p;
    p.push('s');                  //push
    p.push('w');
    p.push('a');
    p.push('e');
    p.push('d');
    if(p.empty())             //empty
        printf("空\n");
    else
        printf("不空\n");
    for(;p.size();)            //size
    {
        cout<<p.top()<<endl;     //top
        p.pop();                //pop,应该删的是优先级最高的
    }
    if(p.empty())
        printf("空\n");
    else
        printf("不空\n");*/
    node n1={"wdd","sa",77};
    node n2={"dwad","as",4};
    node n3={"dwadw","fwf",6};
    node n4={"wdd","sa",3};
    node n5={"asd","ad",2};
    //cout<<n1.a<<endl;
    //cout<<n1.b<<endl;
    priority_queue<node> p;
    p.push(n1);
    p.push(n2);
    p.push(n3);
    p.push(n4);
    p.push(n5);
    cout<<p.size()<<endl;
    if(p.empty())
        printf("空\n");
    else
        printf("不空\n");
     for(;p.size();)            //size
    {
        cout<<p.top().a<<"   "<<p.top().c<<"   "<<p.top().b<<endl;     //top
        p.pop();                //pop,应该删的是优先级最高的
    }
    cout<<p.size()<<endl;
    if(p.empty())
        printf("空\n");
    else
        printf("不空\n");
    return 0;
}

C++ Priority Queues(优先队列)

C++优先队列类似队列,但是在这个数据结构中的元素按照一定的断言排列有序。

empty()如果优先队列为空,则返回真
pop()删除第一个元素
push()加入一个元素
size()返回优先队列中拥有的元素的个数
top()返回优先队列中有最高优先级的元素

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值