【C++】【 lambda使用】priority_queue 与 sort 对 lambda的使用; lambda的多种使用和声明;decltype/auto推导;

一、Lambda 函数与表达式

  • C++11 提供了对匿名函数的支持,称为 Lambda 函数(也叫 Lambda 表达式)。

  • Lambda 表达式把函数看作对象。Lambda 表达式可以像对象一样使用,比如可以将它们赋给变量和作为参数传递,还可以像函数一样对其求值。

  • Lambda 表达式本质上与函数声明非常类似。Lambda 表达式具体形式如下:

  • [capture](parameters)->return-type{body}

  • 例如:

  • [](int x, int y){ return x < y ; }

  • capture 定义如下:

[] // 沒有定义任何变量。使用未定义变量会引发错误。
[x, &y] // x以传值方式传入(默认),y以引用方式传入。
[&] // 任何被使用到的外部变量都隐式地以引用方式加以引用。
[=] // 任何被使用到的外部变量都隐式地以传值方式加以引用。
[&, x] // x显式地以传值方式加以引用。其余变量以引用方式加以引用。
[=, &z] // z显式地以引用方式加以引用。其余变量以传值方式加以引用。

二、priority_queue 定义 及其使用

template <class T, class Container = vector<T>,class Compare = less<typename Container::value_type> > 
	class priority_queue;
  • 其中第三个参数默认为less (从大到小排) ;less 和 greater 是stl提供的比较函数;
  • 下面显式声明为greater;
std::priority_queue<int, std::vector<int>, std::greater<int> >
                            third ;
  • 利用lambda实现 如下:

在这里插入图片描述

  • 例子:
  • 这几种方法都可,其中auto帮我们推导了类型,decltype帮我们解析了类型
function<bool(const int&a, const int&b)> mycomp2 = [&](const int &a, const int &b) { return a < b; };
auto mycomp = [&](const int &a, const int &b) { return a < b; };

priority_queue<int, vector<int>, function<bool(const int&, const int&)>> que5(mycomp);
priority_queue<int, vector<int>, decltype(mycomp2) > que3(mycomp2);

三、sort定义 及其使用

template <class RandomAccessIterator, class Compare>
	void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp);


sort(wordList.begin(), wordList.end(), greater<string>());
sort(wordList.begin(), wordList.end(), [](const string &a, const string &b) { return a < b; }) ;

参考

cplusplus.com

C++ 函数

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值