STL 中优先队列的使用方法(priority_queu)

基本操作:

empty() 如果队列为空返回真

pop() 删除对顶元素

push() 加入一个元素

size() 返回优先队列中拥有的元素个数

top() 返回优先队列对顶元素

在默认的优先队列中,优先级高的先出队。在默认的int型中先出队的为较大的数。

使用方法:

头文件:

#include <queue>

声明方式:

1、普通方法:

priority_queue<int>q;

//通过操作,按照元素从大到小的顺序出队

2、自定义优先级:

struct cmp

{

operatorbool ()(int x, int y)

{

return x > y; // x小的优先级高

//也可以写成其他方式,如: return p[x] > p[y];表示p[i]小的优先级高

}

};

priority_queue<int, vector<int>,
cmp>q;//定义方法

//其中,第二个参数为容器类型。第三个参数为比较函数。

3、结构体声明方式:

struct node

{

int x, y;

friend booloperator< (node a, node b)

{

return a.x > b.x; //结构体中,x小的优先级高

}

};

priority_queue<node>q;//定义方法

//在该结构中,y为值, x为优先级。

//通过自定义operator<操作符来比较元素中的优先级。

//在重载”<”时,最好不要重载”>”,可能会发生编译错误

STL 中队列的使用(queue)

基本操作:

push(x) 将x压入队列的末端

pop() 弹出队列的第一个元素(队顶元素),注意此函数并不返回任何值

front() 返回第一个元素(队顶元素)

back() 返回最后被压入的元素(队尾元素)

empty() 当队列为空时,返回true

size() 返回队列的长度

使用方法:

头文件:

#include <queue>

声明方法:

1、普通声明

queue<int>q;

2、结构体

struct node

{

int x, y;

};

queue<node>q;

STL 中栈的使用方法(stack)

基本操作:

push(x) 将x加入栈中,即入栈操作

pop() 出栈操作(删除栈顶),只是出栈,没有返回值

top() 返回第一个元素(栈顶元素)

size() 返回栈中的元素个数

empty() 当栈为空时,返回 true

使用方法:

和队列差不多,其中头文件为:

#include <stack>

定义方法为:

stack<int>s1;//入栈元素为
int 型

stack<string>s2;// 入队元素为string型

stack<node>s3;//入队元素为自定义型


/**//*

*===================================*

| |

| STL中优先队列使用方法 |

| | 

| chenlie |

| |

| 2010-3-24 |

| |

*===================================*

*/

#include <iostream>

#include <vector>

#include <queue>

usingnamespace std;

];



struct cmp1

{

booloperator ()(int x, int y)

{

return x > y;//小的优先级高

}

};



struct cmp2

{

booloperator ()(constint x, constint y)

{

return c[x] > c[y]; 

// c[x]小的优先级高,由于可以在对外改变队内的值,

//所以使用此方法达不到真正的优先。建议用结构体类型。

}

};



struct node

{

int x, y;

friend booloperator< (node a, node b)

{

return a.x > b.x;//结构体中,x小的优先级高

}

};





priority_queue<int>q1;



priority_queue<int, vector<int>,
cmp1>q2;



priority_queue<int, vector<int>,
cmp2>q3;



priority_queue<node>q4;





queue<int>qq1;

queue<node>qq2;



int main()

{

int i, j, k, m, n;

int x, y;

node a;

while (cin >> n)

{

; i < n;
i++)

{

cin >> a.y >> a.x;

q4.push(a);

}

cout << endl;

while (!q4.empty())

{

cout << q4.top().y <<""<< q4.top().x << endl;

q4.pop();

}

// cout << endl;

}

;

}

STL之优先队列的更多相关文章

  1. 【STL】优先队列priority_queue详解+OpenJudge-4980拯救行动

    一.关于优先队列 队列(queue)这种东西广大OIer应该都不陌生,或者说,队列都不会你还学个卵啊(╯‵□′)╯︵┻━┻咳咳,通俗讲,队列是一种只允许从前端(队头)删除元素.从后端(队尾)插入元素的 ...

  2. STL中优先队列的使用

    普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除.在优先队列中,元素被赋予优先级.当访问元素时,具有最高优先级的元素最先删除.优先队列具有最高级先出的行为特征.我们来说一下C++的 ...

  3. STL priority_queue 优先队列 小记

    今天做题发现一个很有趣的地方,竟然还是头一次发现,唉,还是太菜了. 做图论用STL里的priority_queue去优化prim,由于特殊需求,我需要记录生成树中是用的哪些边. 于是,我定义的优先队列 ...

  4. STL之优先队列(1)

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

  5. STL之优先队列(priority_queue)

    转自网上大牛博客,原文地址:http://www.cnblogs.com/summerRQ/articles/2470130.html 先回顾队列的定义:队列(queue)维护了一组对象,进入队列的对 ...

  6. W - stl 的 优先队列 Ⅲ

    Description In a speech contest, when a contestant finishes his speech, the judges will then grade h ...

  7. V - stl 的 优先队列 Ⅱ

    Description Because of the wrong status of the bicycle, Sempr begin to walk east to west every morni ...

  8. hdu 4393 Throw nails(STL之优先队列)

    Problem Description The annual school bicycle contest started. ZL is a student in this school. He is ...

  9. hdu1716排列2(stl:next_permutation+优先队列)

    排列2 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submis ...

随机推荐

  1. HW3.25

    import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner i ...

  2. ios:Failed to instantiate the default view controller for UIMainStoryboardFile 'Main' - perhaps the designated entry point is not set?

    - (BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary *)laun ...

  3. java实现下载文件到本地

    代码如下: URL url = new URL("http://www.cnblogs.com/images/logo_small.gif"); URLConnection con ...

  4. opencv基础知识-videowriter

    一.前言-简介 在试验中需要常常将实验结果进行保存,在opencv中提供很好用的录制视频的句柄,也可称之为类-videowriter. videowriter应用那是相当的简单,总之分为三步: //声 ...

  5. 1514:数值的整数次方 @jobdu

    题目1514:数值的整数次方 时间限制:1 秒 内存限制:128 兆 特殊判题:否 提交:377 解决:103 题目描述: 给定一个double类型的浮点数base和int类型的整数exponent. ...

  6. MongoDB--使用修改器修改文档

    可以使用修改器啦修改文档,比如增加.删除文档的键值.使用修改器首先要定位到某个文档, 然后再增加相应的修改选项,需要使用update语句 1.$inc修改器修改文档 > db.users.fin ...

  7. cocos2d-x触屏事件(单点触屏)

    转自:http://blog.csdn.net/onerain88/article/details/7550009 一般经常用到的触屏的情况有两种:一种是Layer统一接收触屏消息,然后由程序根据需要 ...

  8. WinDbug抓取进程dump

    安装WinDbug(包含在 Windows Kits-debugger 中)后,运行如下命令将会在 explorer.exe进程发生崩溃后抓取相应的内存数据到D盘根目录下的一个文件夹中 adplus. ...

  9. Python+Django+SAE系列教程17-----authauth (认证与授权)系统1

    通过session,我们能够在多次浏览器请求中保持数据,接下来的部分就是用session来处理用户登录了. 当然,不能仅凭用户的一面之词,我们就相信,所以我们须要认证. 当然了,Django 也提供了 ...

  10. 正尝试在 OS 载入程序锁内执行托管代码。不要尝试在 DllMain 或映像初始化函数内执行托管代码,这样做会导致应用程序挂起。

    出错提示: 正尝试在 OS 载入程序锁内执行托管代码. 不要尝试在 DllMain 或映像初始化函数内执行托管代码,这样做会导致应用程序挂起. 原因分析: .NET2.0中添加了42种非常强大的调试助 ...