欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 艺术 > cpp重写堆的比较函数

cpp重写堆的比较函数

2025/9/23 0:56:17 来源:https://blog.csdn.net/zhuxixi1031/article/details/145934484  浏览:    关键词:cpp重写堆的比较函数

之前写Leetcode的时候,总是对堆(priority_queue)的比较函数有一些疑问,
比如:

  1. greater和less函数的意义是什么,为什么传入greater函数后就是小顶堆,传入less就是大顶堆
  2. 如果需要重写cmp函数,为什么大顶堆需要重写<,而小顶堆重写>
  3. 到底cmp函数要表达怎样的含义,才能达到大顶堆or小顶堆的含义
    在这之前需要搞明白几件事
  4. greater函数和less函数的意义
  5. 为什么要重写结构体的<或者>

greater & less

greater函数意义

template <class T> struct greater {bool operator() (const T& x, const T& y) const {return x>y;}typedef T first_argument_type;typedef T second_argument_type;typedef bool result_type;
};

less函数意义

template <class T> struct less {bool operator() (const T& x, const T& y) const {return x<y;}typedef T first_argument_type;typedef T second_argument_type;typedef bool result_type;
};

可以看到在传入模板T后,需要依赖两个类型的<或者>来判断,所以这也解释了为什么
在小根堆的greater里,x>y时代表x的优先级更高,y会排在top位置,先出堆(因为是小根堆)。

总结

在小根堆重写>时,要注意到x>y会导致y先出堆。在大根堆重写<时,x<y时会让y先出堆。总的来说,只需要严格地按照优先级书写<或者>,大根堆或者小根堆的性质已经由greater和less界定好了

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词