我需要为一个项目实现一个优先级队列,但是STL的priority_queue
没有指出,因为我们需要迭代所有元素并随机删除它们。
我们正在考虑使用STLset
为此,将其包装在一个类中以使其成为 ADT。
对此有更聪明的解决方案吗?
我们怎样才能让它如此一些set
的公共成员函数可以公开使用吗?我们对迭代器等感兴趣。
显然,由于缺乏虚拟析构函数,派生 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())
and return *begin()
:
there are no arguments to 'begin' that depend on a template parameter, so a declaration of 'begin' must be available
为什么是这样?
你真的需要优先级队列吗?
您需要迭代所有项目并随机删除 -> 链接列表
如果需要保持列表排序,请在开头对其进行排序,然后在插入新项目时,使用插入排序(在正确的位置插入新项目)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)