#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
int main() {
std::vector<int> vec = {3, -2, 1, -4, 5};
std::sort(vec.begin(), vec.end(), [](int a, int b) {
int absA = std::abs(a);
int absB = std::abs(b);
if (absA != absB) {
return absA < absB;
} else {
return a < b;
}
});
for (int num : vec) {
std::cout << num << " ";
}
std::cout << std::endl;
return 0;
}
Lambda表达式返回类型推导过程
- 自动推导规则:在C++14及以后版本,Lambda表达式的返回类型可以自动推导。编译器通过分析
return
语句来确定返回类型。
- 复杂逻辑判断下的推导:在上述Lambda表达式中,有两个
return
语句。第一个return
语句return absA < absB;
返回的是一个bool
类型,表示absA
是否小于absB
。第二个return
语句return a < b;
同样返回bool
类型,表示a
是否小于b
。由于所有return
语句返回的都是bool
类型,编译器就可以推导出该Lambda表达式的返回类型为bool
。这符合std::sort
函数对比较函数的要求,std::sort
要求比较函数返回一个bool
值,用于判断两个元素的顺序关系。