【发布时间】:2022-01-09 22:42:21
【问题描述】:
以下面的代码为例:
std::vector<int> vec{1,2,3,4,5};
std::sort(vec.begin(), vec.end(), [](int x, int y) {return x > y; });
此代码按降序对向量进行排序,但我并不完全理解其中的机制。该向量包含 5 个元素,但参数仅包含两个变量 - int x 和 int y。我想知道当这个 lambda 表达式只接受两个变量作为参数时,它是如何对向量中的每个元素进行排序的。
【问题讨论】:
-
我认为您只是对sort 函数的工作原理感到困惑。第三个参数是排序函数用来判断一个元素是否“小于”另一个元素的比较函数。
-
容器的所有元素都被两个两个传递给 lambda 的这两个参数。不仅仅是前两个元素。全部。
-
Lambda 表达式不对元素进行排序:
std:sort会。为此,std::sort需要知道给定元素是否应该按排序顺序在另一个给定元素之前或之后 - 这就是它所谓的 lambda。 -
digito_evo 是的,这正是我要问的,我只是没有正确表达它。所以它被两个两个传递给 lambda 的参数。那么我的问题是,sort 函数中的这个 lambda 表达式是否充当冒泡排序算法?因为它必须多次传递值才能实现排序向量,就像冒泡排序一样。