gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:17:20 26 4
gpt4 key购买 nike

我需要为一个项目实现一个优先级队列,但是 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com