首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >比较器如何与c++内置的排序函数工作?

比较器如何与c++内置的排序函数工作?
EN

Stack Overflow用户
提问于 2022-09-09 06:45:58
回答 2查看 53关注 0票数 -3

因此,我目前正在学习c++中的2D数组,我正在解决这个问题,它有一个2D数组,我们使用c++内置的排序函数和比较器,下面是代码:

代码语言:javascript
复制
  int getLights(vector<vector<int>>& lights) {
  sort(lights.begin(),lights.end(),
             [](const auto& a, const auto& b){
                 return a[0]==b[0] ? a[1]>b[1] : a[0]<b[0];
             });

我无法理解这个排序函数是如何工作的,有人能帮我获得这个输入的输出吗?

代码语言:javascript
复制
lights = [[5,5],[6,3],[3,6]]
EN

回答 2

Stack Overflow用户

发布于 2022-09-09 07:05:37

sort中构建的C++使用要排序的数组的第一个和最后一个元素,以知道必须排序什么。第三个参数是"比较器",即一个函数,如果第一个参数应该放在第二个参数之前,它就接受两个参数并返回true

在您的示例中,向量a位于其他b之前,如果其第一个元素a[0]较小,则另一个元素的b[0]较小;如果它们相同,则a优先于a[1] > b[1]。为了归档这个逻辑,使用了条件算子 (E1 ? E2 : E3),它检查第一个表达式的真值,如果是真则返回第二个,如果是假的,返回第三个表达式。

票数 1
EN

Stack Overflow用户

发布于 2022-09-09 07:01:05

C++ STL提供了一个对向量或数组进行排序的函数排序(具有随机访问权限的项)。

它通常有两个参数,第一个参数是数组/向量的点,从数组/向量开始排序,第二个参数是我们希望数组/向量排序的长度。第三个参数是可选的,可以在我们想按字典排序元素的情况下使用。 默认情况下,sort()函数按照升序顺序对元素进行排序。 如何按特定顺序排序? 我们还可以编写自己的比较器函数,并将其作为第三个参数传递。这个“比较器”函数返回一个值;可转换为bool,这基本上告诉我们传递的“第一个”参数是否应该放在给定的“第二个”参数之前。

来源:C类STL

作为第三个参数编写的函数充当一个比较器(它是lambda表达式),它返回一个布尔值。

代码语言:javascript
复制
return a[0]==b[0] ? a[1]>b[1] : a[0]<b[0];

这个语句基本上比较了a和b的元素,如果第一个元素是对第二个元素的相同检查。对于两个数组的第一个元素,它返回两个数字中最小的一个。

代码语言:javascript
复制
Output: [[3,6],[5,5],[6,3]]
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73658298

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档