diff --git a/TinySTL/Queue.h b/TinySTL/Queue.h index 8a6b782..52a9b5c 100644 --- a/TinySTL/Queue.h +++ b/TinySTL/Queue.h @@ -12,7 +12,57 @@ namespace TinySTL{ //class of priority_queue template , class Compare = TinySTL::less> - 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 + 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 + friend void swap(priority_queue& x, priority_queue& y); + }; + template + void swap(priority_queue& x, priority_queue& y){ + x.swap(y); + } } #endif \ No newline at end of file