完成priority_queue

This commit is contained in:
邹晓航
2014-10-15 13:33:37 +08:00
parent fb63e5155b
commit beb41badf8

View File

@@ -12,7 +12,57 @@ namespace TinySTL{
//class of priority_queue
template <class T, class Container = TinySTL::vector<T>,
class Compare = TinySTL::less<typename Container::value_type>>
class priority_queue{};
class priority_queue{
public:
typedef T value_type;
typedef Container container_type;
typedef typename Container::reference reference;
typedef typename Container::const_reference const_reference;
typedef typename Container::size_type size_type;
private:
container_type container_;
Compare compare_;
public:
explicit priority_queue(const Compare& comp = Compare(),
const Container& ctnr = Container())
: container_(ctnr), compare_(comp){}
template <class InputIterator>
priority_queue(InputIterator first, InputIterator last,
const Compare& comp = Compare(),
const Container& ctnr = Container())
: container_(ctnr), compare_(comp){
container_.insert(container_.end(), first, last);
TinySTL::make_heap(container_.begin(), container_.end());
}
bool empty() const{
return container_.empty();
}
size_type size() const{
return container_.size();
}
reference top() {
return container_.front();
}
void push(const value_type& val){
container_.push_back(val);
TinySTL::push_heap(container_.begin(), container_.end(), compare_);
}
void pop(){
TinySTL::pop_heap(container_.begin(), container_.end(), compare_);
container_.pop_back();
}
void swap(priority_queue& x){
TinySTL::swap(container_, x.container_);
TinySTL::swap(compare_, x.compare_);
}
public:
template <class T, class Container, class Compare>
friend void swap(priority_queue<T, Container, Compare>& x, priority_queue<T, Container, Compare>& y);
};
template <class T, class Container, class Compare>
void swap(priority_queue<T, Container, Compare>& x, priority_queue<T, Container, Compare>& y){
x.swap(y);
}
}
#endif