MaxPriorityQueue

This commit is contained in:
e2hang
2025-08-09 00:52:57 +08:00
parent dce2cea131
commit ac48a86396
4 changed files with 144 additions and 0 deletions

View File

@@ -0,0 +1,8 @@
cmake_minimum_required(VERSION 3.31)
project(priorityQueue)
set(CMAKE_CXX_STANDARD 20)
add_executable(priorityQueue main.cpp
maxPriorityQueue.h
maxPriorityQueueRealise.h)

View File

@@ -0,0 +1,57 @@
#include <iostream>
#include "maxPriorityQueueRealise.h"
using namespace std;
int main() {
maxPriorityQueueRealise<string> q;
vector<pair<string, int>> v;
v.push_back(make_pair("first", 9));
v.push_back(make_pair("second", 8));
v.push_back(make_pair("third", 7));
v.push_back(make_pair("fourth", 6));
v.push_back(make_pair("fifth", 5));
v.push_back(make_pair("sixth", 4));
v.push_back(make_pair("seventh", 1));
v.push_back(make_pair("eighth", 2));
v.push_back(make_pair("ninth", 3));
q.push(v.at(4));
q.push(v.at(3));
q.push(v.at(2));
q.push(v.at(1));
q.push(v.at(0));
q.push(v.at(5));
q.push(v.at(6));
q.push(v.at(7));
q.push(v.at(8));
cout << q.top() << endl;
q.pop();
cout << q.top() << endl;
q.pop();
cout << q.top() << endl;
q.pop();
cout << q.top() << endl;
q.pop();
cout << q.top() << endl;
q.pop();
cout << q.top() << endl;
q.pop();
cout << q.top() << endl;
q.pop();
cout << q.top() << endl;
q.pop();
cout << q.top() << endl;
return 0;
}
/*
*发现789的三个顺序倒过来了类的设计正确
*本类设计的是maxpriority如果有重复的priority优先处理先进入的也就是FIFO
*如果有需求修改可以把比较的时候加入等号变成FILO
first
second
third
fourth
fifth
sixth
ninth
eighth
seventh
*/

View File

@@ -0,0 +1,19 @@
//
// Created by PC on 25-8-9.
//
#ifndef MAXPRIORITYQUEUE_H
#define MAXPRIORITYQUEUE_H
template <class T>
class maxPriorityQueue {
public:
virtual ~maxPriorityQueue() = default;
virtual bool empty() const = 0;
virtual int size() const = 0;
virtual T& top() = 0;
virtual void pop() = 0;
virtual void push(const std::pair<T, int>& x) = 0;
};
#endif //MAXPRIORITYQUEUE_H

View File

@@ -0,0 +1,60 @@
//
// Created by PC on 25-8-9.
//
#ifndef MAXPRIORITYQUEUEREALISE_H
#define MAXPRIORITYQUEUEREALISE_H
#include "maxPriorityQueue.h"
#include <vector>
template <class T>
class maxPriorityQueueRealise : public maxPriorityQueue<T> {
private:
std::vector<std::pair<T, int>> queue; //T是元素int是优先等级
int qsize;
public:
maxPriorityQueueRealise() : qsize(0) {}
bool empty() const {return qsize == 0;}
int size() const {return qsize;}
T& top();
void pop();
void push(const std::pair<T, int>& x);
};
template<class T>
T& maxPriorityQueueRealise<T>::top() {
int max = -1;
int pos = 0;
int index = 0;
for ( std::pair<T, int> x : queue ) {
if (x.second > max) {
max = x.second;
pos = index;
}
index++;
}
return queue[pos].first;
}
template<class T>
void maxPriorityQueueRealise<T>::pop() {
int max = -1;
int pos = 0;
int index = 0;
for ( std::pair<T, int> x : queue ) {
if (x.second > max) {
max = x.second;
pos = index;
}
index++;
}
queue.erase(queue.begin() + pos);
}
template<class T>
void maxPriorityQueueRealise<T>::push(const std::pair<T, int>& x) {
queue.push_back(x);
}
#endif //MAXPRIORITYQUEUEREALISE_H