使用矢量 C++ 的双打优先队列

JTK*_*JTK -3 c++ vector priority-queue

我需要使用 STL 向量为优先级队列编写代码

我被分配了使用向量实现优先级队列的任务,之前我使用列表实现了一个队列,这非常简单,因为列表为我提供了我需要的所有功能。除非我遗漏了优先级队列所没有的东西?

cplusplus.com 上对 Priority Queue 的参考说明:在底层容器(向量)上调用 push_back 和对 push_heap 调用一次(我假设是算法),我不确定如何实现 push_heap 和 pop_heap 或者我是否需要根本。

作业特别要求向量

我正在寻找一个很好的实现/解释。

到目前为止,这是 mo 代码:

.cpp

#include"PriorityQueue.h"
#include <algorithm>

PriorityQueue::PriorityQueue(){

}
void PriorityQueue::push(double val){
    s.push_back(val);

}
void PriorityQueue::pop(){


}
double PriorityQueue::front() const{
    return s.front();
}
double PriorityQueue::back() const{
    return s.back();
}
Run Code Online (Sandbox Code Playgroud)

。H

#ifndef PRIORITYQUEUE_H
#define PRIORITYQUEUE_H
#include <vector>
using std::vector;
class PriorityQueue{
public:
    PriorityQueue();
    void push(double val);
    void pop();
    double front() const;
    double back() const;
private:
    vector<double> s;
};
#endif // !PRIORITYQUEUE_H
Run Code Online (Sandbox Code Playgroud)

如果我需要编写代码来跟踪顶部和底部索引,我可能会缺少基本功能,我只是有点卡住了,没有时间浪费尝试不同解决方案的负载。

Jak*_*old 6

您可以简单地使用 astd::vector并使用push_back与std::push_heap来自algorithm标题的组合向其中添加项目。

  • 注意`algorithm` 不是`algorithms`,并且`push_heap` 不能向`vector` 添加任何东西,它可以做的是重新排序范围内的现有元素(例如向量的元素),使它们形成一个堆. 您需要使用`push_back`添加到向量,然后使用`push_heap`重建堆 (2认同)