cpp-lambda function

在STL中的许多函数都需要提供一个binary comp function,指明是从大到小还是从小到大,比如sort()函数,最大最小堆等。

这个 comp函数 可以是函数指针或函数对象。也可以是个lambda函数:

lambda函数

1
cout<<[](float f)->int {return abs(f)};(-3.5)<<endl;

返回3.

其中[]中是lambda indicators。用法如下:

1
2
3
4
5
6
[ ]://不捕获任何外部变量
[=]://以值的形式捕获所有外部变量
[&]://以引用的形式捕获所有外部变量
[x, &y]://x以值捕获,y以引用捕获
[=, &z]://z以引用捕获,其他以值形式捕获
[&, x]://x以值行形式捕获,其他以引用形式捕获

例子:

1
2
3
4
auto comp = [](const auto& x, const auto& y) { return x.second < y.second; };

sort(vec.begin(), vec.end(), comp)
sort(vec.begin(), vec.end(), [](auto x, auto y){return x>y});