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 排序规则 的相关文章

  • 删除文件的最后 10 个字符

    我想删除文件的最后 10 个字符 说一个字符串 hello i am a c learner 是文件内的数据 我只是希望该文件是 hello i am a 文件的最后 10 个字符 即字符串 c learner 应在文件内消除 解决方案 将
  • 没有特殊字符的密码验证器

    我是 RegEx 的新手 已经进行了大量搜索 但没有找到任何具体内容 我正在编写一个验证密码字符串的正则表达式 可接受的字符串必须至少具有 4 种字符类型中的 3 种 数字 小写字母 大写字母 特殊字符 我对包含有一个想法 也就是说 如果这
  • 在一个数据访问层中处理多个连接字符串

    我有一个有趣的困境 我目前有一个数据访问层 它必须与多个域一起使用 并且每个域都有多个数据库存储库 具体取决于所调用的存储过程 目前 我只需使用 SWITCH 语句来确定应用程序正在运行的计算机 并从 Web config 返回适当的连接字
  • 通过引用传递 [C++]、[Qt]

    我写了这样的东西 class Storage public Storage QString key const int value const void add item QString int private QMap
  • 机器Epsilon精度差异

    我正在尝试计算 C 中双精度数和浮点数的机器 epsilon 值 作为学校作业的一部分 我在 Windows 7 64 位中使用 Cygwin 代码如下 include
  • std::list 线程push_back、front、pop_front

    std list 线程安全吗 我假设不是这样 所以我添加了自己的同步机制 我认为我有正确的术语 但我仍然遇到问题 每个函数都由单独的线程调用 Thread1 不能等待 它必须尽可能快 std list
  • std::vector 与 std::stack

    有什么区别std vector and std stack 显然 向量可以删除集合中的项目 尽管比列表慢得多 而堆栈被构建为仅后进先出的集合 然而 堆栈对于最终物品操作是否更快 它是链表还是动态重新分配的数组 我找不到关于堆栈的太多信息 但
  • 为什么 GCC 不允许我创建“内联静态 std::stringstream”?

    我将直接前往 MCVE include
  • 如何在 C++ 中标记字符串?

    Java有一个方便的分割方法 String str The quick brown fox String results str split 在 C 中是否有一种简单的方法可以做到这一点 The 增强分词器 http www boost o
  • 用于 FTP 的文件系统观察器

    我怎样才能实现FileSystemWatcherFTP 位置 在 C 中 这个想法是 每当 FTP 位置添加任何内容时 我都希望将其复制到我的本地计算机 任何想法都会有所帮助 这是我之前问题的后续使用 NET 进行选择性 FTP 下载 ht
  • C++ 多行字符串原始文字[重复]

    这个问题在这里已经有答案了 我们可以像这样定义一个多行字符串 const char text1 part 1 part 2 part 3 part 4 const char text2 part 1 part 2 part 3 part 4
  • 访问外部窗口句柄

    我当前正在处理的程序有问题 这是由于 vista Windows 7 中增强的安全性引起的 特别是 UIPI 它阻止完整性级别较低的窗口与较高完整性级别的窗口 对话 就我而言 我想告诉具有高完整性级别的窗口进入我们的应用程序 它在 XP 或
  • 人脸 API DetectAsync 错误

    我想创建一个简单的程序来使用 Microsoft Azure Face API 和 Visual Studio 2015 检测人脸 遵循 https social technet microsoft com wiki contents ar
  • 在 Unity 中实现 Fur with Shells 技术

    我正在尝试在 Unity 中实现皮毛贝壳技术 http developer download nvidia com SDK 10 5 direct3d Source Fur doc FurShellsAndFins pdf Fins 技术被
  • C 编程:带有数组的函数

    我正在尝试编写一个函数 该函数查找行为 4 列为 4 的二维数组中的最大值 其中二维数组填充有用户输入 我知道我的主要错误是函数中的数组 但我不确定它是什么 如果有人能够找到我出错的地方而不是编写新代码 我将不胜感激 除非我刚去南方 我的尝
  • C# 动态/expando 对象的深度/嵌套/递归合并

    我需要在 C 中 合并 2 个动态对象 我在 stackexchange 上找到的所有内容仅涵盖非递归合并 但我正在寻找能够进行递归或深度合并的东西 非常类似于jQuery 的 extend obj1 obj2 http api jquer
  • C++ 继承的内存布局

    如果我有两个类 一个类继承另一个类 并且子类仅包含函数 那么这两个类的内存布局是否相同 e g class Base int a b c class Derived public Base only functions 我读过编译器无法对数
  • 对于某些 PDF 文件,LoadIFilter() 返回 -2147467259

    我正在尝试使用 Adob e IFilter 搜索 PDF 文件 我的代码是用 C 编写的 我使用 p invoke 来获取 IFilter 的实例 DllImport query dll SetLastError true CharSet
  • C++ 中的 include 和 using 命名空间

    用于使用cout 我需要指定两者 include
  • 使用 WGL 创建现代 OpenGL 上下文?

    我正在尝试使用 Windows 函数创建 OpenGL 上下文 现代版本 基本上代码就是 创建窗口类 注册班级 创建一个窗口 choose PIXELFORMATDESCRIPTOR并设置它 创建旧版 OpenGL 上下文 使上下文成为当前

随机推荐

  • 最大熵模型简介[例子+推导+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