c++ prioprity_queue

10月12号,一上午刷了两道简单题。。。看来只能从学习上获取成就感了,今天先来priority_queue,刚好上午刷题的时候遇见了。


一:基本的介绍

  1. priority_queue的头文件<queue>
  2. priority_queue<Type,Container,Functional>
    ***Type是自己定义的元素的类型,比如说int,也可以是一个结构体node
    ***Container是装元素的容器,默认的是vector,可以是deque,不能是list。
    ***Functional是元素比较的方法,比较方式默认用 operator< , 所以如果你把后面俩个参数缺省的话,优先队列就是大顶堆,队头元素最大。
     

二:傲娇的compare——有关改变元素的比较方式:

 我觉得这个问题可能是最经常遇见的问题了。
***对于已经存在的类型,比如int、double,可以直接使用参数Functional。比如元素的类型是int的时候,Functional默认的参数是lees<int >。咦,你是不是会有疑惑,priority_queue不是大顶堆吗?不是最大的元素在最前面?这就是优先队列的傲娇之处,说是less但是确实最大的先出来。那么与此相反的greater<int>就是最小的元素在前面了。

***对于自己定义的类型,最好的方法就是在类型里面直接写运算符重载函数.

#include <iostream>
#include <queue>
using namespace std;
struct Node{
    int x, y;
    Node( int a= 0, int b= 0 ):
        x(a), y(b) {}
};
 
bool operator<( Node a, Node b ){
    if( a.x== b.x ) return a.y> b.y;
    return a.x> b.x; 
}
 
int main(){
    priority_queue<Node> q;
    q.push(Node(1,2));
    q.push(Node(1,3));
    while( !q.empty() ){
        cout << q.top().x << ' ' << q.top().y << endl;
        q.pop();
    }
    getchar();
    return 0;
}

三:基本的操作函数

q.size()   q.pop()   q.top()   q.push()  q.empty()

因为自己c++学的不好,着重记录一下q.push()的操作。

定义一个普通的结构体,压入队列的时候总是要先把把值赋给结构体,然后压入结构体。这样很麻烦,可以在结构体里面写上一个构造函数,这样就可以直接把值压入优先队列。

priority_queue<node> q;

一: 
struct node{
	int x,y;
};
q.push(node(1,2));//错误 
q.push((1,2));//错误

二:
struct ndoe{
	int x,y;
	node(int a=0,b=0):
		x(a),y(b){}
}; 
q.push(node(1,2))//正确 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值