C ++程序中的双头优先级队列

在本教程中,我们将使用c ++中的集合创建一个双优先级队列。

让我们看看创建双端队列的步骤。

  • 根据需要创建一个具有名称的结构。

  • 使用该集合为队列创建一个变量。

  • 返回队列大小的size方法。

  • is_empty方法,返回队列是否为空。

  • insert方法,用于将新元素插入队列。

  • 从队列左侧返回元素的get_start方法。

  • 从队列右侧返回元素的get_end方法。

  • delete_start方法,该方法从左侧删除第一个元素。

  • delete_end方法从右侧删除第一个元素。

示例

让我们看一下代码。

#include <bits/stdc++.h>
using namespace std;
struct doubleEndedQueue {
   set<int> s;
   int size() {
      return s.size();
   }
   string is_empty() {
      return s.size() == 0 ? "True" : "False";
   }
   void insert(int x) {
      s.insert(x);
   }
   int get_start() {
      return *(s.begin());
   }
   int get_end() {
      return *(s.rbegin());
   }
   void delete_start() {
      if (s.size() == 0) {
         return;
      }  
      s.erase(s.begin());
   }
   void delete_end() {
      if (s.size() == 0) {
         return;
      }
      auto end = s.end();
      end--;
      s.erase(end);
   }
};
int main() {
   doubleEndedQueue d;
   cout << "是空的: " << d.is_empty() << endl;
   d.insert(1);
   d.insert(2);
   d.insert(3);
   d.insert(4);
   d.insert(5);
   cout << "是空的: " << d.is_empty() << endl;
   cout << "end: " << d.get_end() << endl;
   d.delete_end();
   cout << "end: " << d.get_end() << endl;
   cout << "start: " << d.get_start() << endl;
   d.delete_start();
   cout << "start: " << d.get_start() << endl;
   return 0;
}
输出结果

如果运行上面的代码,则将得到以下结果。

是空的: True
是空的: False
end: 5
end: 4
start: 1
start: 2

结论