最开始在项目文档看到priority_queue这个模板时,还以为是自己定义的呢,后来查了一下,原来这是STL中存在的一种优先队列。

1.最简单的使用方法

std::priority_queue<int> q;默认从大到小

#include <iostream>
#include <queue>
#include <vector>
int main()
{
std::priority_queue<int> q;
for(int i=0;i<10;i++)
q.push(i);
while(!q.empty())
{
std::cout<<q.top()<<std::endl;
q.pop();
}
for(int i=9;i>=0;i--)
{
q.push(i);
}
while(!q.empty())
{
std::cout<<q.top()<<std::endl;
q.pop();
}
return 0;
}

  

2.自定义的方法

需要对操作符自定义

 #include <iostream>
#include <string>
#include <vector>
#include <queue>
class MyResult
{
public:
MyResult(std::string word,int dist,int fre)
:m_word(word),m_dist(dist),m_frequece(fre)
{
}
std::string get_word() const
{
return m_word;
}
int get_dist()
{
return m_dist;
}
int get_fre()
{
return m_frequece;
} private:
std::string m_word;
int m_dist;
int m_frequece;
};
class MyCompare//定义比较方法,先比较dist,dist小的在前面,如果dist相等,再比较fre,fre大的在前面
{
public:
bool operator()( MyResult left, MyResult right) const
{
if(left.get_dist()==right.get_dist()) return left.get_fre()<right.get_fre();
return left.get_dist()>right.get_dist();
}
};
int main()
{
std::priority_queue<MyResult,std::vector<MyResult>,MyCompare> m_result;
MyResult r1("hello",,),r2("world",,),r3("jimmy",,),r4("kill",,);
m_result.push(r1);
m_result.push(r2);
m_result.push(r3);
m_result.push(r4);
while(!m_result.empty())
{
std::cout<<m_result.top().get_word()<<std::endl;
m_result.pop();
}
return ;
}

运行结果为:

jimmy

world

hello

kill

【STL】c++ priority_queue的使用方法的更多相关文章

  1. STL之priority_queue(优先队列)

    priority_queue是一个容器适配器,在这个容器里第一个数据元素是最大的.它的使用场景是什么样:如果12306抢票,为什么黄牛能抢这么多票,感觉12306那边的请求队列是一个优先队列,黄牛的请 ...

  2. STL中priority_queue小结

    (1)为了运用priority_queue,你必须包含头文件<queue>:#include<queue> (2)在头文件中priority_queue定义如下: namesp ...

  3. C++ STL之priority_queue

    STL中的priority_queue(优先队列)是一种会按照自定义的一种方式(数据的优先级)来对队列中的数据进行动态的排序的容器,不同优先级的情况下,top()上永远是最高优先级的数据,其底层采用的 ...

  4. STL中的set使用方法详细!!!!

    1.关于set C++ STL 之所以得到广泛的赞誉,也被很多人使用,不只是提供了像vector, string, list等方便的容器,更重要的是STL封装了许多复杂的数据结构算法和大量常用数据结构 ...

  5. STL不同容器的使用方法

    以下内容摘自:http://blog.csdn.net/u014465639/article/details/70241850 1.vector(需要导入头文件#include <vector& ...

  6. STL之priority_queue使用简介

    优先队列容器也是一种从一端入队,另一端出对的队列.不同于一般队列的是,队列中最大的元素总是位于队首位置,因此,元素的出对并非按照先进先出的要求,将最先入队的元素出对,而是将当前队列中的最大元素出对. ...

  7. STL 之 sort 函数使用方法

    关于Sort Sort函数是C++ STL(Standard Template Library / 标准函数库) <algorithm>头文件中的一个排序函数,作用是将一系列数进行排序,因 ...

  8. STL 中priority_queue小结

    (1)为了运用priority_queue,你必须包含头文件<queue>:#include<queue>    (2)在头文件中priority_queue定义如下: nam ...

  9. STL之Deque的使用方法

    STL 中类 stack 实现了一个栈 1)push 能够插入元素 2)pop 移除栈顶元素 使用的时候,需要包含头文件 #include <stack>,stack 被声明如下: nam ...

随机推荐

  1. 重新学习一次javascript;

    每次有项目的时候,总觉得自己什么都不会做,然后做的时候又很简单,一会就做完了,啪啪打脸: 每次别人问的时候,我知道怎么做,但是不知道具体原理,觉得瞬间low了: 想要好好的吧基础掌握一下: 这几天空闲 ...

  2. Asp.Net Core Use MongoDB

    前几天在网上想找一下Asp.Net Core使用MongoDB相关的文章,也看了几篇,发现都是在写简单的例子,这样的例子是不能用在生产环境的,不能用的生产环境的.封装一个东西一定是建立在你对这个东西足 ...

  3. IOS safari浏览器登陆时Cookie无法保存的问题

    近期完成了一个儿童的测评项目,测试到最后的时候发现在ipad mini上登陆成功之后无法跳转页面,而安卓和pc端都可以,找了大半天bug,发现其他的苹果设备都没问题,只能一个一个的调试,结果发现设备的 ...

  4. jquery实现上下滑动选择

    $('.rightShow').on('mousewheel', function(ev) { var dir = ev.originalEvent.wheelDelta if(dir == 120) ...

  5. 试用最强Spark IDE--IDEA

    1.安装IntelliJ IDEA IDEA 全称 IntelliJ IDEA,是java语言开发的集成环境,IntelliJ在业界被公认为最好的java开发工具之一,尤其在智能代码助手.代码自动提示 ...

  6. ASP.NET没有魔法——ASP.NET MVC路由

    之前的文章中介绍了My Blog文章维护功能的开发,开发过程中使用Area的方法建立了用于维护文章的Controller.View和Model.但是无论代码怎么变对于浏览器来说都是通过一个url地址去 ...

  7. [学习OpenCV攻略][006][平滑图片]

    cvCreateImage(图片大小,像素位数,通道数) 创建图片,根据输入的图片大小,各个通道像素点的位数,和通道数.像素点宏IPL_DEPTH_8U cvGetSize(图片) 得到图片的大小信息 ...

  8. jQuery:图片自动变换

    <script type="text/javascript"> var aa=0; //设置变换时间为2s var timeChange=2000; //定义数组 va ...

  9. nginx 防火墙、权限问题

      1.nginx安装,配置完成之后,尝试访问没有响应,主机可以ping通,/var/log/nginx/access.log日志没有查到任何记录 解决方法:查看linux防火墙,关闭 命令:ipta ...

  10. windows 防火墙拦截nginx的问题

    今天在azure vm上安装了nginx并配置了代理设置,但域名访问始终无法中转,一开始怀疑是nginx的服务没起来,但在本地访问localhost看下如下界面,证明服务是没问题的. 本地访问没问题, ...