【C++】仿函数和priority_queue(优先级队列)

目录

一、仿函数 

二、priority_queue(优先级队列)

1、概念:

2、使用:

3、数组中第K个最大元素

4、priority_queue的模拟实现


一、仿函数 

①、概念:

仿函数,即函数对象。一种行为类似函数的对象,调用者可以像函数一样使用该对象,其实现起来也比较简单:用户只需实现一种新类型,在类中重载operator()即可,参数根据用户所要进行的操作选择匹配。

②、代码:

  •  用内置类型比较大小关系:
//仿函数/函数对象 --- 对象可以像调用函数一样去使用
struct less
{
	//()运算符重载--用于比较大小
	bool operator()(int x, int y)
	{
		return x < y;
	}
};
  • 利用模板比较less: 
template<class T>
struct less//用于 < 的比较
{
	bool operator()(const T& x, const T& y) const
	{
		return x < y;
	}
};
  • 利用模板比较greater
template<class T>
struct greater//用于  > 的比较
{
	bool operator()(const T& x, const T& y) const
	{
		return x > y;
	}
};

 ③、测试: 

//测试less
less<int> LessFunc;
cout << LessFunc(1, 2) << endl;//1
//测试greater
greater<int> GreaterFunc;
cout << GreaterFunc(1, 5) << endl;//0

为什么说仿函数又叫函数对象?

比如测试代码中的LessFunc,它是个对象,但他调用时直接写为LessFunc(1, 2),就像一个函数在调用,但他并不是函数,调用的本质是lessFunc.operator()(1, 2),所以仿函数即对象可以像函数一样使用

④、algorithm中的sort

 sort的第三个参数使用到了仿函数,其为仿函数的对象(第三个参数还可以是函数指针,以及后续讲的lambda表达式

第一个参数和第二个参数都是迭代器,第三个参数可以是仿函数,其默认值为less

升序:less <       降序:greater >  

注:第三个参数不传默认是less,即排升序

#include<iostream>
#include<algorithm>
using namespace std;

void test_sort()
{
	vector<int>v;
	v.push_back(1);
	v.push_back(4);
	v.push_back(5);
	v.push_back(2);
	//升序,l
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值