std :: sort_heap按降序排列

时间:2015-12-05 14:09:55

标签: c++ sorting c++11

所以我遇到了这段代码。我添加的唯一内容是谓词参数。

template<class RandomAccessIt, class Predicate = std::less<>> inline
void heap_sort(RandomAccessIt first, RandomAccessIt last, Predicate predicate = Predicate())
{
    std::make_heap(first, last);
    std::sort_heap(first, last, predicate);
}

正如标题所说,它适用于:

int arr[] = { 143, 2, 365, 4, 5 };
heap_sort(std::begin(arr), std::end(arr));

但是给我一个调试错误(无效堆):

int arr[] = { 143, 2, 365, 4, 5 };
heap_sort(std::begin(arr), std::end(arr), std::greater<>());

我也尝试过其他容器。那么允许自定义UnaryPredicate有什么意义呢?

1 个答案:

答案 0 :(得分:2)

std::make_heap
需要使用相同的谓词调用

std::make_heap(first, last, predicate);
std::sort_heap(first, last, predicate);

否则,堆使用错误的标准构建,并且不会是predicate的最大堆。这违反了std::sort_heap(first, last, predicate);的前提条件。