C++ lambda自定义map,set,vector,list 排序规则

2023-11-10

Map和Set本质红黑二叉树,插入数据时可以自定义比较算法,list和vector链表插入时无需比较(所以一般全部插入完成后调用sort() )核心代码:

	typedef struct MyStudent
	{
		std::string name;
		int grade;
	} Student;

	//Lambda设置map排序规则,同样适合于set
	auto func = [](const Student* left, const Student* right)
	{
		return left->grade < right->grade;
	};

	//定义map
	std::map<const Student*, std::string,decltype(func)> stuMap(func);

	//定义set
	std::set<const Student*,decltype(func)> stuSet(func);


    //定义vector,list同理
    std::vector< Student*> stuVec{};
    //ToDo Add Student...
    std::sort(stuVec.begin(), stuVec.end(), [](const Student* left, const Student* right)
	{
		return left->name < right->name;
	});

输出:

完整代码:

int main()
{
	typedef struct Student
	{
		std::string name;
		int grade;
	} Student;

	//Lambda设置map排序规则,同样适合于vector,list
	auto func = [](const Student* left, const Student* right)
	{
		return left->grade < right->grade;
	};

	//定义map
	std::map<const Student*, std::string,decltype(func)> stuMap(func);

	//定义set
	std::set<const Student*,decltype(func)> stuSet(func);

	//测试代码
	Student* s1 = new Student{ "s1",12 };
	Student* s2 = new Student{ "s2",84 };
	Student* s3 = new Student{ "s3",99 };
	Student* s4 = new Student{ "s4",33 };

	//map
	stuMap.emplace(s1,"otherVals1");
	stuMap.emplace(s2, "otherVals2");
	stuMap.emplace(s3, "otherVals3");
	stuMap.emplace(s4, "otherVals4");
	std::cout << "map:" << '\n';
	for (auto stu : stuMap)
	{
		std::cout << stu.first->grade << ":" << stu.first->name <<":"<<stu.second<< '\n';
	}
	std::cout << "-------------------------------------------" << '\n';

	//set
	stuSet.insert(s1);
	stuSet.insert(s2);
	stuSet.insert(s3);
	stuSet.insert(s4);
	std::cout << "set:" << '\n';
	for (auto stu : stuSet)
	{
		std::cout << stu->grade << ":" << stu->name << '\n';
	}
	std::cout << "-------------------------------------------" << '\n';

	delete s1,s2, s3, s4;
	system("Pause");
	return 0;
}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ lambda自定义map,set,vector,list 排序规则 的相关文章

  • 金特 + XNA (C#)

    是否可以使用jint http jint codeplex com操作使用 XNA C 创建的 3D 环境 并向该环境添加功能 再次使用 jint 作为 Jint 的贡献者 我会推荐你Jint http jint codeplex com
  • 我应该把 try/catch 和“using”语句放在哪里? [复制]

    这个问题在这里已经有答案了 可能的重复 try catch using 正确的语法 https stackoverflow com questions 4590490 try catch using right syntax 我想try c
  • JSON.Net 反序列化返回“null”

    我正在使用 JSON Net 反序列化 JSON 字符串 JSON 字符串是 string testJson Fruits Apple color red size round Orange Pro
  • 如何使用 ASP.NET MVC 编辑多选列表?

    我想编辑一个如下所示的对象 我希望用 UsersGrossList 中的一个或多个用户填充 UsersSelectedList 使用 mvc 中的标准编辑视图 我只得到映射的字符串和布尔值 下面未显示 我在 google 上找到的许多示例都
  • 元组在 VS2012 中如何工作?

    Visual Studio 2012 功能 tuples但不是可变参数模板 这是如何完成的 如何在不使用可变模板的情况下实现元组 简而言之 微软做了与之前在 NET 中实现类似元组的数据类型完全相同的事情 创建许多版本 每个版本都有固定数量
  • IEnumerable 的 String.Join(string, string[]) 的类似物

    class String包含非常有用的方法 String Join string string 它从数组创建一个字符串 用给定的符号分隔数组的每个元素 但一般来说 它不会在最后一个元素之后添加分隔符 我将它用于 ASP NET 编码 以用
  • 我如何知道 C 程序的可执行文件是在前台还是后台运行?

    在我的 C 程序中 我想知道我的可执行文件是否像这样在前台运行 a out 或者像这样 a out 如果你是前台工作 getpgrp tcgetpgrp STDOUT FILENO or STDIN FILENO or STDERR FIL
  • C free() 是如何工作的? [复制]

    这个问题在这里已经有答案了 可能的重复 malloc 和 free 如何工作 https stackoverflow com questions 1119134 how malloc and free work include
  • 进程退出后 POSIX 名称信号量不会释放

    我正在尝试使用 POSIX 命名信号量进行跨进程同步 我注意到进程死亡或退出后 信号量仍然被系统打开 在进程 打开它 死亡或退出后是否有办法使其关闭 释放 早期的讨论在这里 当将信号量递减至零的进程崩溃时 如何恢复信号量 https sta
  • 在 ASP.NET MVC 中将模型从视图传递到控制器

    我正在 ASP NET MVC 中开发我的第一个应用程序 但遇到了一个我无法解决的问题 即使在阅读了整个互联网之后也是如此 因此 我有几个使用视图模型创建的视图 它们是报告 这些视图模型是根据用户选择标准填充的 我正在尝试构建一种接受模型并
  • 将日期时间转换为指定格式

    我有这个日期格式yy MM dd HH mm ss ex 12 02 21 10 56 09 问题是 当我尝试使用以下代码将其转换为不同格式时 CDate 12 02 21 10 56 09 ToString MMM dd yyyy HH
  • 如何使用 Roslyn 通过扩展方法、静态类中的方法以及带有 ref/out 参数的方法来访问调用

    我正在致力于创建一个开源项目 用于创建 NET UML 序列图 该项目利用名为 js sequence diagrams 的 javascript 库 我不确定 Roslyn 是适合这项工作的工具 但我想我应该尝试一下 所以我整理了一些概念
  • 时间:2019-03-17 标签:c++fstream并发访问

    如果从不同的进程 线程同时访问文件会发生什么 据我所知 没有锁定文件的标准方法 只有操作系统特定的功能 就我而言 文件将被经常读取而很少写入 现在如果A打开一个文件进行读取 ifstream 并开始读取块 和B打开相同的文件进行写入 ofs
  • 无法为 wsdl 文件创建服务引用

    I have wsdl文件和xsd我本地机器上的文件 我想在项目中添加服务引用 我没有网络服务 我只有wsdl file 我收到以下错误 The document was understood but it could not be pro
  • C 中使用 getrandom 实现随机浮点数

    我试图生成一个介于 0 和 1 之间的随机浮点数 无论是在 0 1 还是 0 1 对我来说都不重要 网上关于此的每个问题似乎都涉及rand 呼叫 播种time NULL 但我希望能够每秒多次调用我的程序 并每次都获得不同的随机数 这引导我找
  • Autoconf 问题:“错误:C 编译器无法创建可执行文件”

    我正在尝试使用 GNU 自动工具构建一个用 C 编写的程序 但显然我设置错误 因为当configure运行 它吐出 configure error C compiler cannot create executables 如果我看进去con
  • 有没有办法直接在函数参数中格式化字符串而不是使用临时字符串?

    我有一个接受字符串 字符数组 作为参数的函数 void enterString char my string 当使用这个函数时 我经常发现自己想要输入格式化的字符串 我使用 sprintf 来做到这一点 然而 我每次都必须创建一个临时字符串
  • 如果“嵌入式”SQL 2008 数据库文件不存在,如何创建它?

    我使用 C ADO Net 和在 Server Management Studio 中创建的嵌入式 MS SQL 2008 数据库文件 附加到 MS SQL 2008 Express 创建了一个数据库应用程序 有人可以向我指出一个资源 该资
  • 这种尺寸对齐是如何工作的

    对于所提供的评论 我无法理解以下代码 这段代码的作用是什么 以及等效的代码是什么8 aligned segment size must be 4 aligned attr gt options ssize 3 Here ssize is o
  • 如何在c linux中收听特定接口上的广播?

    我目前可以通过执行以下操作来收听我编写的简单广播服务器 仅广播 hello int fd socket PF INET SOCK DGRAM 0 struct sockaddr in addr memset addr 0 sizeof ad

随机推荐

  • 最大熵模型简介[例子+推导+GIS求解…

    这篇文章是结合论文http www cqvip com Main Detail aspx id 7707219对博文 http www cnblogs com hexinuaa p 3353479 html加入自己的理解做了简化重写 另外本
  • 使用jQuery实现显示文字气球的提示

    使用jQuery实现显示文字气球的提示 本文由 arthinking 发表于884 天前 Javascript 暂无评论 被围观 3 115 views 为了使页面效果更绚丽 可以使用文字气球的提示功能 在jQuery中 可以使用简单的几条
  • Unity Mecanim动画系统 之 解决模型有些动画播放后发生的位置、方向偏转 (根骨骼动画)的问题

    Unity Mecanim动画系统 之 解决模型有些动画播放后发生的位置 方向偏转 根骨骼动画 的问题 目录 Unity Mecanim动画系统 之 解决模型有些动画播放后发生的位置 方向偏转 的问题 一 简单介绍 二 实现原理 三 效果预
  • ebay运营思路

    Ebay是一个老牌的跨境电商 目前仍然是稳坐全球前列的平台 也是强手如云的地方 虽然相对于亚马逊他显得没有那么 卷 要在这片市场中抢占一番天地 首先一定要学会一些高效的运营技巧 今天就来分享一些Ebay运营技巧 帮助你更快更好的打造一个高质
  • STM32四旋翼设计——1.系统架构

    一 前言 历时一年半 终于将STM32四旋翼调通 2023 4 9顺利起飞 现在想将这个设计过程都记录下来 包括板子的设计方案 板卡结构设计 板卡原理图 PCB 各模块调试的过程 但大部分只涉及硬件 软件部分后面看情况整理 因为程序部分我也
  • 用vite 新建vue3项目

    1 component里的HelloWorld vue 是组件 2 总的vue App vue 3 index css 写的App vue的css 不是组建的vue 为什么呢 4 main js 几个import来源 HelloWorld
  • 694 不同岛屿的数量

    题目描述 给定一个非空 01 二维数组表示的网格 一个岛屿由四连通 上 下 左 右四个方向 的 1 组成 你可以认为网格的四周被海水包围 请你计算这个网格中共有多少个形状不同的岛屿 两个岛屿被认为是相同的 当且仅当一个岛屿可以通过平移变换
  • IOS本地推送 学习手记

    iOS上有两种消息通知 一种是本地消息 Local Notification 一种是远程消息 Push Notification 也叫Remote Notification 设计这两种通知的目的都是为了提醒用户 现在有些什么新鲜的事情发生了
  • JavaWeb学习笔记 ---- HTML

    web概念概述 软件架构 1 C S Client Server 客户端 服务器端 在用户本地有一个客户端程序 在远程有一个服务器端程序 优点 用户体验好 缺点 开发 安装 部署 维护 麻烦 2 B S Browser Server 浏览器
  • Python机器学习从零开始(一)序章

    目录 前言 写在前面 1 什么是机器学习 1 1 监督学习 1 2无监督学习 2 Python中的机器学习 3 必须环境安装 Anacodna安装 总结 前言 每一次变革都由技术驱动 纵观人类历史 上古时代 人类从采集狩猎社会 进化为农业社
  • node.js学习笔记--定义GET和POST路由

    const http require http const queryString require querystring const server http createServer req res gt const url req ur
  • csapp 第一章 计算机系统漫游

    计算机系统由硬件和系统软件组成 共同工作来运行应用程序 include
  • Java基础+进阶

    本文适合Java入门和复习回顾 高级篇请参考导航里的面试题 导航 黑马Java笔记 踩坑汇总 Java基础 JavaWeb SSM SpringBoot 瑞吉外卖 SpringCloud 黑马旅游 谷粒商城 学成在线 牛客面试题 目录 一
  • 实现小说分页article

    翻页过程 代码实现 css部分 margin 0 padding 0 box sizing border box wrapper height 100vh overflow hidden margin 0 16px article colu
  • 【每日知识】React学习笔记

    一 React特点 1 声明式编程 2 组件化开发 3 多平台适配 二 React开发依赖 1 React 包含react所必须的核心代码 2 react dom react渲染在不同平台所需的核心代码 3 babel 将jsx转换成rea
  • 【ChatGPT实战】9.使用ChatGPT-+-Midjourney-帮忙做了个App

    在当今数字化的时代 手机App已经成为人们生活的重要组成部分 开发一个优秀的手机App需要付出大量的时间和精力 特别是在设计和开发阶段 但是现在我们可以借助工具和技术来协助自己简化这个过程 在这篇教程中 我将介绍如何使用ChatGPT和Mi
  • 类模板以及赋值运算符重载、拷贝构造函数

    编译器默认的拷贝构造函数 是发生的浅拷贝 像指针的赋值就会让指针指向同一个地址空间 析构时就会对同一个地址空间释放两次 就会造成程序崩溃 自定义在模板内的拷贝构造函数 Queue const Queue
  • Mysql数据库笔记

    Mysql数据库 1 初识数据库 1 解决数据读取慢的问题 2 数据一致性 3 数据的安全性 4 解决了并发问题 数据库管理系统DBMS 数据库管理员DBA 数据库database db 表 table 数据库分类 1 关系型数据库 数据之
  • 数据库基础知识整理文档

    Oracle数据库基本数据类型 分类 数据类型 存储内容 存储空间 备注 数值 Number 数值 22个字节 number n 只能存储整数 精度n来指定 number n m 存储小数 n 代表整数位数 小数位数 m代表的小数位数 整数
  • C++ lambda自定义map,set,vector,list 排序规则

    Map和Set本质红黑二叉树 插入数据时可以自定义比较算法 list和vector链表插入时无需比较 所以一般全部插入完成后调用sort 核心代码 typedef struct MyStudent std string name int g