首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >std::sort_heap降序

std::sort_heap降序
EN

Stack Overflow用户
提问于 2015-12-05 14:09:55
回答 1查看 438关注 0票数 2

所以我偶然发现了这个密码。我只添加了谓词参数。

代码语言:javascript
复制
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);
}

现在,正如标题所述,它可以很好地处理:

代码语言:javascript
复制
int arr[] = { 143, 2, 365, 4, 5 };
heap_sort(std::begin(arr), std::end(arr));

但是给出了一个调试错误(无效堆),其中:

代码语言:javascript
复制
int arr[] = { 143, 2, 365, 4, 5 };
heap_sort(std::begin(arr), std::end(arr), std::greater<>());

我也和其他容器一起试过这个。那么允许定制UnaryPredicate有什么意义呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-05 14:12:26

代码语言:javascript
复制
std::make_heap

需要用相同的谓词调用:

代码语言:javascript
复制
std::make_heap(first, last, predicate);
std::sort_heap(first, last, predicate);

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34106440

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档