C ++中的Lambda函数,参数和逻辑[重复]
Posted
技术标签:
【中文标题】C ++中的Lambda函数,参数和逻辑[重复]【英文标题】:Lambda function, arguments and logic in c++ [duplicate] 【发布时间】:2021-11-16 23:47:34 【问题描述】:我不熟悉在 C++ 中使用 lambda 函数。我一直在研究网络,找到了几篇解释 lambda 函数的语法和用途的文章,但我没有找到明确解释如何编写 lambda 函数的内部逻辑的文章。
例如
在 c++ 中按降序对向量进行排序时:
sort(v1.begin(), v1.end(), [](const int &a, const int &b)return b < a;);
我写了上面的代码。在这里,我有几个问题:
为什么我在 lambda 函数中只提供两个参数?为什么不是三个?或者我为什么不给出所有的 n 参数(n 是向量的大小)并做一个逻辑?我不是要找到最多两个元素,而是要对向量进行排序,为什么只考虑两个值?
为什么 a > b 是降序排列?为什么不是 b > a? lambda 函数内部是否有任何排序?
上述lambda函数的返回值是false(0)还是true(1)?为什么我只需要返回 false(0) 或 true(1) 来排序?为什么我不能返回一个字符进行排序,比如让我们假设返回值 'a' 它是升序的,而返回值 'd' 它是降序的?
再次
在寻找最大偶数元素时
itr = max_element(v1.begin(), v1.end(), [](const int &a, const int &b)
if (isEven(a) && isEven(b))
return (a < b);
else
return false;
);
我要返回 b > a。而不是a大于b。 ???
任何建议将不胜感激。
【问题讨论】:
听起来你可以使用good C++ book。您的许多问题以及更多问题都包含在其中。 这些问题中的大多数并不是关于 lambda 的,而是关于std::sort
的第三个参数。具体来说,这里是third overload。 sort(begin, end, comp)
是说“对范围 [begin, end)
从最小到最大进行排序,使用 comp
来确定‘最小’的实际含义”。
【参考方案1】:
您的问题与 lambdas 无关,而是与 std::sort
函数有关。
确实,如果您阅读有关第三个参数(比较函数,在您的情况下为 lambda)的文档,它会说:
比较函数对象,如果第一个参数是则返回真 小于(即先于)第二个。
比较函数的签名应该等同于 以下:
bool cmp(const Type1 &a, const Type2 &b);
确实,不需要创建 lambda 来将其作为第三个参数传递。您可以传递任何接收两个 T 类型参数(容器元素之一)并返回 bool 的函数对象。
例如,你可以这样做:
#include <vector>
#include <algorithm>
#include <iostream>
struct
bool operator () (int a, int b)
return a > b;
my_comp;
int main()
std::vector<int> v=1,2,3;
std::sort(v.begin(), v.end(), my_comp);
for(auto e:v) std::cout << e << " ";
std::cout << std::endl;
【讨论】:
my_comp::operator()
应该是const
以上是关于C ++中的Lambda函数,参数和逻辑[重复]的主要内容,如果未能解决你的问题,请参考以下文章