c++ - 实现可在 C++ 中迭代的优先级队列

标签 c++ priority-queue

我需要为一个项目实现一个优先级队列,但是 STL 的 priority_queue 没有显示,因为我们需要遍历所有元素并随机删除它们。

我们正在考虑为此使用 STL 的 set,将其包装在一个类中以使其成为 ADT。

是否有更智能的解决方案?

我们怎样才能使 set 的一些公共(public)成员函数可以公开使用?我们对迭代器等感兴趣。

显然推导 STL 是不明智的,因为缺少虚拟析构函数:/


新代码:

#ifndef PRIORITYQUEUE_H_
#define PRIORITYQUEUE_H_

#include <set>

template<typename T, template<typename X> class impl_type = std::set>
class PriorityQueue {
    typedef impl_type<T> set_type;
    typedef typename set_type::iterator iterator;
public:
    void push(const T& x) {
        insert(x);

    }

    void pop() {
        erase(begin());
    }

    const T& top() const {
        return *begin();
    }
};

#endif /* PRIORITYQUEUE_H_ */

所以,我们目前有这个。编译器不会提示插入,但会提示 erase(begin())return *begin():

'begin' 没有依赖于模板参数的参数,因此 'begin' 声明必须可用

这是为什么?

最佳答案

你真的需要优先队列吗?

您需要遍历所有项目并随机删除 -> 链表

如果您需要保持列表排序,请在开头对其进行排序,然后在插入新项目时使用插入排序(在正确的位置插入新项目)。

关于c++ - 实现可在 C++ 中迭代的优先级队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4421506/

相关文章:

c++ - 为什么默认构造的迭代器可以用于单程结束地标?

java - Java中的priorityQueue顺序?

java - 将 PriorityQueue 转换为排序数组的最佳方法

java - 尝试将对象添加到 PriorityQueue 时出现 NullPointerException

c++ - 未提供时从 COM+ dll 获取 IDL(用于 TLB)

c++ - 在 SAPI 5.3 中禁用主要语音识别

c++ - 数字 n^n 的前 k 位和后 k 位

java - PriorityQueue的顺序错误

c++ - 空间有限的优先级队列 : looking for a good algorithm

c++ - 在 C++ 中创建一个 zip 存档