c++ STL 优先队列

操作1:

新建一个优先队列:

ps:该操作需要包含头文件queue

priority_queue < int , vector<int> , greeter <int> > t1;
priority_queue < int , vector<int> , less <int> > t2; 

解释:

接下来对解释一下新建时的三个参数:

其中第一个参数为优先队列的数据类型,可以是int,double之类的

其中第二个参数是指用什么容器来储存这个优先队列,我们一般用vector。

其中第三个参数是指优先队列根是最大值还是最小值,其中greeter

操作二:

插入一个元素:

t1.push(元素);
t2.push(元素);

操作三:

查看顶部的元素。

我们用优先队列自带的top()函数来输出顶部元素。

比如说这样:

printf ("%d\n", t1.top());
printf ("%d\n", t2.top());

操作四:

弹出顶部元素:

t1.pop();
t2.pop();

操作五: (copy 来的)

如果想自定义优先级并且数据类型不是基本数据类型,而是复杂数据类型,则必须重载其中的operator( )

#include<iostream>
#include<cstdio>
#include<queue>
using namespace std;
typedef struct
{
    int a;
    int b;
}Node;
// 自定义优先级
struct cmp
{
    bool operator()(const Node &t1,const Node &t2)
    {
        return t1.b<t2.b;  // 相当于less,数据元素值大的优先级高
    }
};
int main()
{
    int i,n;
    scanf("%d",&n);
    Node *num=new Node[n];
    for(i=0;i<n;i++)
    {
        scanf("%d%d",&num[i].a,&num[i].b);
    }
    priority_queue<Node,vector<Node>,cmp> q(num,num+n);
    while(!q.empty())
    {
        printf("%d ",q.top().b);
        q.pop();
    }
    printf("\n");
    return 0;
}

操作五(copy 来的):

优先队列还可以将一个普通数组中的元素转化为优先队列的初始值!

#include<iostream>
#include<cstdio>
#include<queue>

using namespace std;

int main()
{
    int a[6]={3,2,1,4,6,5};
    priority_queue < int , vector <int> , less <int> > q (a,a+6);
    while(!q.empty())
    {
        printf("%d ",q.top());
        q.pop();
    }
    printf("\n");
    return 0;
}

原文地址:https://www.cnblogs.com/lixiao189/p/9301007.html

时间: 2024-10-27 16:14:38

c++ STL 优先队列的相关文章

poj3253 Fence Repair STL优先队列

转载请注明出处:http://blog.csdn.net/u012860063 题目链接:http://poj.org/problem?id=3253 Description Farmer John wants to repair a small length of the fence around the pasture. He measures the fence and finds that he needs N (1 ≤ N ≤ 20,000) planks of wood, each

ZOJ2724_Windows Message Queue(STL/优先队列)

解题报告 题意: 看输入输出就很明白. 思路: 优先队列. #include <algorithm> #include <iostream> #include <cstring> #include <cmath> #include <queue> #include <vector> #include <cstdio> #include <map> using namespace std; struct node

STL+优先队列

1 #include<iostream> 2 #include<queue> 3 #include<string.h> 4 using namespace std; 5 const int INF =100000000; 6 const int MAXN =1000; 7 const int MAXM =100000; 8 int m,n; 9 int first[MAXN],d[MAXN]; 10 int u[MAXM],v[MAXM],w[MAXM],next[MA

STL 优先队列的自定义比较函数与 sort() 等泛型算法的自定义比较函数的区别

前言 最近在刷算法题,常常需要自定义比较函数作为作为函数对象送入 stl 中,遇到了下面的问题: 泛型算法 sort() 的比较函数是这么写: //sort() 实现元素间关系为递增的比较函数 struct cmp{ bool operator () (const T& a, const T& b) const { return a.x < b.x; } }; //或者这样bool operator < (const T& a, const T& b) cons

UVA - 136 Ugly Numbers(丑数,STL优先队列+set)

Ugly numbers are numbers whose only prime factors are 2, 3 or 5. The sequence 1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 15, ... shows the first 11 ugly numbers. By convention, 1 is included. Write a program to find and print the 1500'th ugly number. Input Ther

STL优先队列的使用

STL中有一个优先队列的容器可以使用. [头文件] queue 队列容器 vector 向量容器 [操作] 优先级队列支持的操作 q.empty()         如果队列为空,则返回true,否则返回false q.size()            返回队列中元素的个数 q.pop()             删除队首元素,但不返回其值 q.top()             返回具有最高优先级的元素值,但不删除该元素 q.push(item)     在基于优先级的适当位置插入新元素 1

STL优先队列详解

优先队列 优先队列是一种抽象数据类型(Abstract Date Type,ADT),行为和队列类似,但是先出队的元素不是先进队列的元素,而是队列中优先级最高的元素. STL的优先队列定义在头文件<queue>和 (队列一样),用"priority_queue<int>pq"来声明: 最基本的用法 定义:priority_queue<int>pq: 操作: pq.empty() 如果队列为空返回真 pq.pop() 删除对顶元素 pq.push()

stl 优先队列(堆)

[模板]堆 题目描述 如题,初始小根堆为空,我们需要支持以下3种操作: 操作1: 1 x 表示将x插入到堆中 操作2: 2 输出该小根堆内的最小数 操作3: 3 删除该小根堆内的最小数 输入输出格式 输入格式: 第一行包含一个整数N,表示操作的个数 接下来N行,每行包含1个或2个正整数,表示三种操作,格式如下: 操作1: 1 x 操作2: 2 操作3: 3 输出格式: 包含若干行正整数,每行依次对应一个操作2的结果. 输入输出样例 输入样例#1: 5 1 2 1 5 2 3 2 输出样例#1:

C++STL——优先队列

一.相关定义 优先队列容器与队列一样,只能从队尾插入元素,从队首删除元素.但是它有一个特性,就是队列中最大的元素总是位于队首,所以出队时,并非按照先进先出的原则进行,而是将当前队列中最大的元素出队.这点类似于给队列里的元素进行了由大到小的顺序排序.元素的比较规则默认按元素值由大到小排序,可以重载"<"操作符来重新定义比较规则. 优先级队列可以用向量(vector)或双向队列(deque)来实现(注意list container不能用来实现queue,因为list的迭代器不是任意存