在STL中,有一类容器完全以底部容器为基础进行实现,这类容器归类为container adapter。

 

priority_queue

priority_queue默认使用vector为基础,加上heap算法,其实现比较简单。

 1 template <class T, class Sequence = vector<T>, 
 2           class Compare = less<typename Sequence::value_type> >
 3 class  priority_queue {
 4 public:
 5     typedef typename Sequence::value_type value_type;
 6     typedef typename Sequence::size_type size_type;
 7     typedef typename Sequence::reference reference;
 8     typedef typename Sequence::const_reference const_reference;
 9 protected:
10     Sequence c;
11     Compare comp;
12 public:
13     priority_queue() : c() {}
14 
15     template <class InputIterator>
16     priority_queue(InputIterator first, InputIterator last, const Compare& x)
17         : c(first, last), comp(x) { make_heap(c.begin(), c.end(), comp); }
18  
19     // 只是对Sequence方法跟heap算法的封装
20     bool empty() const { return c.empty(); }
21     size_type size() const { return c.size(); }
22     const_reference top() const { return c.front(); }
23     void push(const value_type& x) {
24         c.push_back(x); 
25         push_heap(c.begin(), c.end(), comp);
26     }
27     void pop() {
28         pop_heap(c.begin(), c.end(), comp);
29         c.pop_back();
30     }
31 };
View Code

相关文章: