【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.自定义的方法

需要对操作符自定义

 1 #include <iostream>
 2 #include <string>
 3 #include <vector>
 4 #include <queue>
 5 class MyResult
 6 {
 7 public:
 8     MyResult(std::string word,int dist,int fre)
 9         :m_word(word),m_dist(dist),m_frequece(fre)
10     {
11     }
12     std::string  get_word() const
13     {
14         return m_word;
15     }
16     int get_dist()
17     {
18         return m_dist;
19     }
20     int get_fre()
21     {
22         return m_frequece;
23     }
24
25 private:
26     std::string m_word;
27     int m_dist;
28     int m_frequece;
29 };
30 class MyCompare//定义比较方法,先比较dist,dist小的在前面,如果dist相等,再比较fre,fre大的在前面
31 {
32 public:
33     bool operator()( MyResult left, MyResult right) const
34     {
35         if(left.get_dist()==right.get_dist()) return left.get_fre()<right.get_fre();
36         return left.get_dist()>right.get_dist();
37     }
38 };
39 int main()
40 {
41     std::priority_queue<MyResult,std::vector<MyResult>,MyCompare> m_result;
42     MyResult r1("hello",3,100),r2("world",2,60),r3("jimmy",2,100),r4("kill",4,600);
43     m_result.push(r1);
44     m_result.push(r2);
45     m_result.push(r3);
46     m_result.push(r4);
47     while(!m_result.empty())
48     {
49         std::cout<<m_result.top().get_word()<<std::endl;
50         m_result.pop();
51     }
52     return 0;
53 }

运行结果为:

jimmy

world

hello

kill

时间: 2024-12-19 07:46:24

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

STL之priority_queue(优先队列)

priority_queue是一个容器适配器,在这个容器里第一个数据元素是最大的.它的使用场景是什么样:如果12306抢票,为什么黄牛能抢这么多票,感觉12306那边的请求队列是一个优先队列,黄牛的请求携带了一个隐含参数,所以他的请求最先执行.当然这是怀疑.不过也是优先级队列的使用场景.还可以进行排序,把数据压入优先队列中,然后出队列就是由大到小排列了 注意:stl的priority_queue容器需要一个boolean operator<(const T& ,const T&)函数

STL vector中的rbegin方法(5)

public member function <vector> std::vector::rbegin C++98 C++11 reverse_iterator rbegin() noexcept; const_reverse_iterator rbegin() const noexcept; Return reverse iterator to reverse beginning 返回一个反向的首元素. 例子: #include <iostream> #include <v

STL vector中的front方法(4)

public member function <vector> std::vector::front reference front(); const_reference front() const; Access first element 访问第一个元素 Returns a reference to the first element in the vector. 返回第一个元素的引用. Unlike member vector::begin, which returns an itera

【STL】vector的insert方法详解

#include<vector> #include<iostream> using namespace std; int main() { vector<int> v(3); v[0]=2; v[1]=7; v[2]=9; v.insert(v.begin(),8);//在最前面插入新元素. v.insert(v.begin()+2,1);//在迭代器中第二个元素前插入新元素 v.insert(v.end(),3);//在向量末尾追加新元素. vector<int

STL vector中的crbegin方法(7)

其实crbegin就相当于cbegin+rbegin. 关于这两个函数可以看我的上两篇博文. public member function <vector> std::vector::crbegin const_reverse_iterator crbegin() const noexcept; Return const_reverse_iterator to reverse beginning Returns a const_reverse_iterator pointing to the

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

1.关于set C++ STL 之所以得到广泛的赞誉,也被很多人使用,不只是提供了像vector, string, list等方便的容器,更重要的是STL封装了许多复杂的数据结构算法和大量常用数据结构操作.vector封装数组,list封装了链表,map和set封装了二叉树等,在封装这些数据结构的时候,STL按照程序员的使用习惯,以成员函数方式提供的常用操作,如:插入.排序.删除.查找等.让用户在STL使用过程中,并不会感到陌生. 关于set,必须说明的是set关联式容器.set作为一个容器也是

STL学习——Priority_queue篇

STL学习--Priority_queue篇 概述 priority_queue是一个拥有权值观念的queue,它允许加入新元素,移除旧元素,审视元素值等功能.因为它是queue,故只允许底端加入元素,顶端取出元素.priorit_queue内元素并非依照被推入的次序排列,而是依照元素权值排列.权值最高者,排在最前面. 实现 priority_queue利用max_heap和vector表现的完全二叉树实现.它的实现完全以底部容器为根据,并使用heap处理规则,故实现简单.默认情况,使用vect

STL之priority_queue的用法

priority_queue的用法:这里先将一下STL里面的heap(堆),再来将如何使用heap来实现优先队列 在STL里面: 下面介绍STL中与堆相关的4个函数--建立堆make_heap(),在堆中添加数据push_heap(),在堆中删除数据pop_heap()和堆排序sort_heap(): 头文件 #include <algorithm> 下面的_First与_Last为可以随机访问的迭代器(指针),_Comp为比较函数(仿函数),其规则--如果函数的第一个参数小于第二个参数应返回

C++ STL之priority_queue

STL中的priority_queue(优先队列)是一种会按照自定义的一种方式(数据的优先级)来对队列中的数据进行动态的排序的容器,不同优先级的情况下,top()上永远是最高优先级的数据,其底层采用的是堆结构(默认大顶堆).注意相同优先级下并没有先进先出,后面的例子中可以看到 头文件#include<queue> 标准库默认使用元素类型的<操作符来确定它们之间的优先级关系,数据越大优先级越高,想要改变优先级的界定方式的话需要重载<操作符. 先看个最简单的: #include<