Tôi cần triển khai hàng đợi ưu tiên cho một dự án, nhưng ST23's priority_queue
không được chỉ định vì chúng ta cần lặp lại tất cả các phần tử và xóa chúng một cách ngẫu nhiên.Thực hiện hàng đợi ưu tiên có thể được lặp lại trong C++
Chúng tôi đang suy nghĩ về việc sử dụng STL's set
cho việc này, gói nó trong một lớp học để làm cho nó một ADT.
Có giải pháp thông minh hơn cho điều này không?
Làm cách nào để chúng tôi có thể sử dụng công khai một số chức năng thành viên công khai của set
? Chúng tôi quan tâm đến việc lặp vv
Rõ ràng bắt nguồn STL là không khôn ngoan vì sự thiếu destructors ảo:/
Code mới:
#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_ */
Vì vậy, chúng tôi hiện có điều này. Trình biên dịch không phàn nàn về chèn, nhưng nó không phàn nàn về erase(begin())
và return *begin()
:
there are no arguments to 'begin' that depend on a template parameter, so a declaration of 'begin' must be available
Tại sao điều này?
Bạn nên gắn thẻ chỉ là bài tập về nhà. – Pacane
Đây là một phần nhỏ của một dự án lớn hơn nhiều. Nhưng chắc chắn, tôi không cần câu trả lời mã. –