【STL】c++ priority_queue的使用方法
最开始在项目文档看到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的使用方法的更多相关文章
- STL之priority_queue(优先队列)
priority_queue是一个容器适配器,在这个容器里第一个数据元素是最大的.它的使用场景是什么样:如果12306抢票,为什么黄牛能抢这么多票,感觉12306那边的请求队列是一个优先队列,黄牛的请 ...
- STL中priority_queue小结
(1)为了运用priority_queue,你必须包含头文件<queue>:#include<queue> (2)在头文件中priority_queue定义如下: namesp ...
- C++ STL之priority_queue
STL中的priority_queue(优先队列)是一种会按照自定义的一种方式(数据的优先级)来对队列中的数据进行动态的排序的容器,不同优先级的情况下,top()上永远是最高优先级的数据,其底层采用的 ...
- STL中的set使用方法详细!!!!
1.关于set C++ STL 之所以得到广泛的赞誉,也被很多人使用,不只是提供了像vector, string, list等方便的容器,更重要的是STL封装了许多复杂的数据结构算法和大量常用数据结构 ...
- STL不同容器的使用方法
以下内容摘自:http://blog.csdn.net/u014465639/article/details/70241850 1.vector(需要导入头文件#include <vector& ...
- STL之priority_queue使用简介
优先队列容器也是一种从一端入队,另一端出对的队列.不同于一般队列的是,队列中最大的元素总是位于队首位置,因此,元素的出对并非按照先进先出的要求,将最先入队的元素出对,而是将当前队列中的最大元素出对. ...
- STL 之 sort 函数使用方法
关于Sort Sort函数是C++ STL(Standard Template Library / 标准函数库) <algorithm>头文件中的一个排序函数,作用是将一系列数进行排序,因 ...
- STL 中priority_queue小结
(1)为了运用priority_queue,你必须包含头文件<queue>:#include<queue> (2)在头文件中priority_queue定义如下: nam ...
- STL之Deque的使用方法
STL 中类 stack 实现了一个栈 1)push 能够插入元素 2)pop 移除栈顶元素 使用的时候,需要包含头文件 #include <stack>,stack 被声明如下: nam ...
随机推荐
- UI Automation
public Form1() { InitializeComponent(); this.textBox1.AccessibilityObject.Name = "t1"; thi ...
- 获取Object对象的length
所有JS程序猿(甚至不止JS)都知道,数组(Array)是有length的,通过length属性,可以很方便的获取数组的长度.可以说,只要使用到了数组,就必会使用到其length属性. 而Object ...
- Arduino 开源库 u8glib2 之 图标显示【原创】
Arduino 开源库 u8glib2 研究之 图标显示 -----------------关于drawXBM drawXBMP函数使用的研究 因为心血来潮,近来想做一个 ...
- Java map 详解 - 用法、遍历、排序、常用API等
尊重原创: http://www.cnblogs.com/lzq198754/p/5780165.html 概要: java.util 中的集合类包含 Java 中某些最常用的类.最常用的集合类是 L ...
- Entity framework 中Where、First、Count等查询函数使用时要注意
在.Net开发中,Entity framework是微软ORM架构的最佳官方工具.我们可以使用Lambda表达式在Entity framework中DbSet<T>类上直接做查询(比如使用 ...
- IT术语的正确读法
Linux /ˈlɪnəks/ /ˈlɪnʊks/(EU) Linux 是一类 Unix 计算机操作系统的统称.该操作系统的核心的名字也是“ Linux” .参考: < !-- m --> ...
- linux 硬软链接区别
linux 硬软链接区别 linux的软连接(symbolic link or soft link)类似于windows的快捷方式:而硬链接(hard link)机制有点像copy,不过不同的是,带有 ...
- MyEclipse设置jsp页默认打开方式
可以用来设置jsp页默认打开是代码编辑模式而不是半视图半代码的模式. 1.选择菜单Window→Preferences. 2.选择General→Editors→File Associations.在 ...
- MySQL5.6安装(RPM)笔记
1. 检查MySQL是否安装,如果有安装,则移除(rpm –e 名称)[root@localhost ~]# rpm -qa | grep -i mysqlmysql-libs-xxxxxxxxxx. ...
- <global-results>标签来定义全局的<result>
<global-results> <result name="error">/Error.jsp</result> <!-- Ac ...