| 类别:算法 | 组件类型:函数 |
template <class RandomAccessIterator>
void push_heap(RandomAccessIterator first, RandomAccessIterator last);
template <class RandomAccessIterator, class StrictWeakOrdering>
void push_heap(RandomAccessIterator first, RandomAccessIterator last,
StrictWeakOrdering comp);
两个版本的push_heap它们定义如何判定一个元素是否小于另一个元素的方式不同。第一个版本使用operator<比较对象,而第二个版本使用 函数对象comp比较对象。第一个版本的先验条件是is_heap(first, last)为true,第二个版本的先验条件是is_heap(first, last, comp)为true.
int main()
{
int A[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
make_heap(A, A + 9);
cout << "[A, A + 9) = ";
copy(A, A + 9, ostream_iterator<int>(cout, " "));
push_heap(A, A + 10);
cout << endl << "[A, A + 10) = ";
copy(A, A + 10, ostream_iterator<int>(cout, " "));
cout << endl;
}
输出是
[A, A + 9) = 8 7 6 3 4 5 2 1 0 [A, A + 10) = 9 8 6 3 7 5 2 1 0 4
[1] 堆是在 随机访问迭代器[f, l)范围内对元素进行排序的一种特定方式。堆非常有用(尤其是在排序中或作为优先级队列使用时)的原因在于,它们满足两个重要的特性。首先,*f是堆中最大的元素。其次,可以在对数时间内向堆中添加一个元素(使用push_heap),或从中删除*f它。内部而言,堆是用作顺序范围表示的一棵树。这棵树的构建方式使每个节点都小于或等于其父节点。