利用Lambda表达式实现vector中pair/结构体的排序

这篇具有很好参考价值的文章主要介绍了利用Lambda表达式实现vector中pair/结构体的排序。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

众所周知,对于vector<pair<int, int> >若直接使用sort排序,会默认按照pair第一个关键字从小到大进行排序:

#include <bits/stdc++.h>

using namespace std;

int main()
{
	vector<pair<int, int> > p;
	p.push_back({1, 3});
	p.push_back({4, 2});
	p.push_back({2, 5});
	
	sort(p.begin(), p.end());
	
	for (auto i : p) {
		cout << i.first << " " << i.second;
		puts("");
	}
	return 0;
}

其输出结果为:
利用Lambda表达式实现vector中pair/结构体的排序,C/C++杂项,c++,算法,开发语言

若想要更改其排序规则,可以考虑使用自定义cmp函数并添加在sort的第三个参数位置,

但使用 L a m b d a \rm Lambda Lambda表达式则更为简单。如下代码对pair按照第二个关键字从小到大排序。

#include <bits/stdc++.h>

using namespace std;

int main()
{
	vector<pair<int, int> > p;
	p.push_back({1, 3});
	p.push_back({4, 2});
	p.push_back({2, 5});
	
	sort(p.begin(), p.end(), [](const pair<int, int> &a, const pair<int, int> &b) {return a.second < b.second;});
	
	for (auto i : p) {
		cout << i.first << " " << i.second;
		puts("");
	}
	return 0;
}

其输出结果为:
利用Lambda表达式实现vector中pair/结构体的排序,C/C++杂项,c++,算法,开发语言
与以下代码完全等价。

#include <bits/stdc++.h>

using namespace std;

bool cmp(const pair<int, int> &a, const pair<int, int> &b) {
	return a.second < b.second;
}
int main()
{
	vector<pair<int, int> > p;
	p.push_back({1, 3});
	p.push_back({4, 2});
	p.push_back({2, 5});
	
	sort(p.begin(), p.end(), cmp);
	
	for (auto i : p) {
		cout << i.first << " " << i.second;
		puts("");
	}
	return 0;
}

类似的,也可以按照第一个关键字与第二个关键字之和的大小来排序,对应的 L a m b d a \rm Lambda Lambda表达式应这样书写:

sort(p.begin(), p.end(), [](const pair<int, int> &a, const pair<int, int> &b) {return a.first + a.second < b.first + b.second;});

当然也可以写作

sort(p.begin(), p.end(), [&](const pair<int, int> a, const pair<int, int> b) {return a.first + a.second < b.first + b.second;});

其中[&]表示按引用的方式捕获变量。

更多的,结构体的自定义排序也可以采用 L a m b d a \rm Lambda Lambda表达式。例如:

struct Range
{
    int l, r;
}t[N];

sort(t, t + n, [](const Range &a, const Range &b) {return a.r < b.r;});

等价于

struct Range
{
    int l, r;
     bool operator< (const Range &W)const
     {
         return r < W.r;
     }
}t[N];

sort(t, t + n);

均为按照Range结构体的r从小到大排序。文章来源地址https://www.toymoban.com/news/detail-797273.html

到了这里,关于利用Lambda表达式实现vector中pair/结构体的排序的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C++结合Lambda表达式在函数内部实现递归

    529. 扫雷游戏 已解答 中等 相关标签 相关企业 让我们一起来玩扫雷游戏! 给你一个大小为  m x n  二维字符矩阵  board  ,表示扫雷游戏的盘面,其中: \\\'M\\\'  代表一个  未挖出的  地雷, \\\'E\\\'  代表一个  未挖出的  空方块, \\\'B\\\'   代表没有相邻(上,下,左,右,和所有4个

    2024年02月21日
    浏览(42)
  • 如何使用C#中的Lambda表达式操作Redis Hash结构,简化缓存中对象属性的读写操作

    Redis是一个开源的、高性能的、基于内存的键值数据库,它支持多种数据结构,如字符串、列表、集合、散列、有序集合等。其中,Redis的散列(Hash)结构是一个常用的结构,今天跟大家分享一个我的日常操作,如何使用Redis的散列(Hash)结构来缓存和查询对象的属性值,以

    2024年02月16日
    浏览(58)
  • 【javaSE】 Lambda表达式与Lambda表达式的使用

    Lambda表达式是Java SE 8中一个重要的新特性。lambda表达式允许你通过表达式来代替功能接口。 lambda表达式就和方法一样,它提供了一个正常的参数列表和一个使用这些参数的主体(body,可以是一个表达式或一个代码块)。 Lambda 表达式(Lambda expression) ,基于数学中的λ演算得名,也

    2024年02月08日
    浏览(62)
  • 进阶JAVA篇- Lambda 表达式与 Lambda 表达式的省略规则

    目录         1.0 什么是 Lambda 表达式?         1.1 既然跟匿名内部类相关,先来回顾匿名内部类。          1.2 Lambda 表达式与匿名内部类之间的关系。         1.3 函数式接口         1.4 在具体代码中来操作一下         2.0 Lambda 表达式省略规则          Lambda 表达

    2024年02月08日
    浏览(55)
  • 探索Python中的函数式编程:Lambda表达式与函数式工具【第135篇—Lambda表达式】

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 在Python编程世界中,函数式编程逐渐成为了一种流行的范式,特别是在处理数据和编写简洁、高效代码时。函数式编程的核心思想是将计算视

    2024年04月08日
    浏览(87)
  • 【JAVA】包装类、正则表达式、Arrays类、Lambda表达式

    包装类是8种基本数据类型对应的引用类型 作用:后期的集合和泛型不支持基本类型,只能使用包装类 基本数据类型和其对应的引用数据类型的变量可以互相赋值 基本数据类型 引用数据类型 byte Byte short Short int Integer long Long char Character float Float double Double boolean Boolean 包装类

    2024年02月13日
    浏览(58)
  • .NET写一个自己的Lambda表达式与表达式树

    LambdaExpression继承Expression Expression 又继承LambdaExpressio 所以,LambdaExpression与 Expression 的区别在于:泛型类以静态类型的方法标识了它是什么种类的表达式,也就是说,他确定了返回类型和参数。所以显然,TDelegate必须是一个委托类型。 注意 :并非所有的Lambda表达式都能转换成

    2024年02月13日
    浏览(48)
  • 23.Lambda表达式

    Lambda 表达式(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction),是一个匿名函数,即没有函数名的函数。Lambda表达式可以表示闭包(注意和数学传统意义上的不同)。Lambda表达式是Java SE 8中一个重要的新特性。

    2024年02月03日
    浏览(45)
  • Lambda表达式(JAVA)

    注:如果没有学过 匿名内部类 和 接口 不推荐往下看。 (parameters) - expression 或 (parameters) -{ statements; } parameters:表示参数列表; -:可理解为“被用于”的意思; expression:表示一条语句; statements:表示多条语句。 Lambda可以理解为:Lambda就是匿名内部类的简化。 lambda表达式

    2024年02月08日
    浏览(54)
  • Java Lambda表达式

    1.1 函数式编程思想概括 在数学中,函数就是有输入量、输出量的一套计算方案,也就是“拿数据做操作” 面向对象思想强调“必须通过对象的形式来做事情” 函数式思想则尽量忽略面

    2024年02月07日
    浏览(61)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包