在了解priority_queue(优先队列)前,可以先去瞅瞅queue,下面是传送门啦>——<

传送门

priority_queue的基本性能

class priority_queue<>实现出一个queue,只不过其中的元素依照优先级被读取。priority_queue的接口与queue非常相近,只不过在插入元素后priority_queue会自动为元素排序,默认排序是operator <形成降序排列,也就是说,队首的元素默认是最大的元素,我们在弹出元素时,就会弹出最大的那个元素。值得注意的是,如果同时存在若干个数值最大的元素,我们无法确知究竟哪一个会入选。

priority_queue使用须知

1.包含头文件

  1. #include<queue>

2.在头文件<queue>中,class priority_queue 定义如下

  1. namespace std
  2. {
  3. template <typename T,
  4. typename Container = vector<T>
  5. typename Compare = less<typename Container::value_type>>
  6. class priority_queue;
  7. }

第一个template参数是元素类型,带有默认值的第二个template参数定义了priority_queue内部用来存放元素的容器,默认容器为vector,带有默认值的第三个template参数定义出“用以查找下一个最高优先级元素”的排序准则,默认以operator<作为比较标准。

但实际上,你可以用任何sequence容器支持priority_queue,只要他们支持random-access iterator和front()、push_back()、pop_back()等操作就行。由于priority_queue用到了STL heap算法,所以容器必须支持random-access。

priority_queue核心操作

1.核心接口成员函数

  1. push() //将一个元素放入priority_queue中
  2. top() //返回priority_queue的一个队首元素,但是不删除它
  3. pop() //删除priority_queue的一个队首元素,但是不返回它

2.建立一个升序排序准则的priority_queue

  1. priority_queue<int,vector<int>,greater<int> > pq; //建立一个容器为vector名为 pq 的 priority_queue

3.priority_queue的具体操作

  1. #include<iostream>
  2. #include<queue> //必不可少的头文件们
  3. using namespace std;
  4. int main()
  5. {
  6. //创建一个容器为string的优先队列
  7. priority_queue<string> pq1;
  8. //插入三个字符串
  9. pq1.push("AWSL");
  10. pq1.push("WSND");
  11. pq1.push("NMSL");
  12. //打印优先队列
  13. cout << "priority_queue pq1:" << endl;
  14. cout << "now pq1.size is: ";
  15. cout << pq1.size() << endl;
  16. cout << "从队首开始弹出pq1的元素" << endl;
  17. cout << pq1.top() << endl;
  18. pq1.pop();
  19. cout << pq1.top() << endl;
  20. pq1.pop();
  21. cout << pq1.top() << endl;
  22. pq1.pop();
  23. cout << "now pq1.size is: ";
  24. cout << pq1.size() << endl;
  25. cout << endl;
  26. //-----------------------------------
  27. //创建一个容器默认但是排序准则为升序的优先队列
  28. priority_queue<int, vector<int>, greater<int> > pq2;
  29. //插入三个数字
  30. pq2.push(4396);
  31. pq2.push(777);
  32. pq2.push(250);
  33. //打印优先队列
  34. cout << "priority_queue pq2:" << endl;
  35. cout << "now pq2.size is: ";
  36. cout << pq2.size() << endl;
  37. cout << "从队首开始弹出pq2的元素" << endl;
  38. cout << pq2.top() << endl;
  39. pq2.pop();
  40. cout << pq2.top() << endl;
  41. pq2.pop();
  42. cout << pq2.top() << endl;
  43. pq2.pop();
  44. cout << "now pq2.size is: ";
  45. cout << pq2.size() << endl;
  46. }

本文留下了一个小bug,等待初学者自己去发现哟,嘻嘻嘻/*-*\

 

版权声明:本文为cloudplankroader原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/cloudplankroader/p/10394252.html