set容器一自定义数据类型指定排序规则讲解

简介: set容器一自定义数据类型指定排序规则讲解

set 容器是 C++ 标准库中的一个关联容器,它存储的元素是唯一的,并且默认按照升序排列。当 set 容器存储自定义数据类型时,我们需要为这些类型定义排序规则。默认情况下,set 容器会使用 < 运算符来确定元素间的顺序,但对于自定义类型,我们可能需要定义自己的比较逻辑。

 

为了指定自定义数据类型的排序规则,我们可以为 set 容器提供一个比较函数对象或 lambda 表达式作为模板参数。比较函数对象或 lambda 表达式应该接受两个自定义类型的参数,并返回一个布尔值来表示这两个元素的大小关系。

 

下面,我将通过一个具体的例子来详细讲解如何为 set 容器中的自定义数据类型指定排序规则。

 

自定义数据类型

首先,我们定义一个简单的自定义数据类型 Person,它包含姓名和年龄两个属性。

image.png

在这个例子中,我们为 Person 类型重载了 < 运算符,以便在需要默认排序时使用。但请注意,这并不意味着我们必须重载 < 运算符才能为 set 提供自定义排序规则。实际上,我们可以完全忽略这个重载,并通过为 set 提供自定义比较函数对象来定义排序逻辑。

 

自定义排序规则

现在,假设我们想要根据 Person 的姓名对 set 中的元素进行排序,而不是年龄。为了实现这一点,我们可以定义一个比较函数对象或 lambda 表达式。

 

使用比较函数对象

image.png

在这个例子中,我们定义了一个名为 NameComparator 的比较函数对象,它接受两个 Person 对象作为参数,并根据它们的姓名进行比较。然后,在创建 set 容器时,我们将 NameComparator 作为第二个模板参数传递,以指定按姓名排序的规则。

 

使用 lambda 表达式(C++11 及以后版本)

从 C++11 开始,我们还可以使用 lambda 表达式来定义比较逻辑,这使得代码更加简洁。

image.png

在这个例子中,我们使用了一个 lambda 表达式作为 set 容器的比较函数。decltype 关键字用于推断 lambda 表达式的类型,并将其作为模板参数传递给 set。lambda 表达式本身接受两个 Person 对象,并根据它们的姓名进行比较。

目录
相关文章
|
11月前
|
域名解析 网络协议 API
【Azure Container App】配置容器应用的缩放规则 Managed Identity 连接中国区 Azure Service Bus 问题
本文介绍了在 Azure Container Apps 中配置基于自定义 Azure Service Bus 的自动缩放规则时,因未指定云环境导致的域名解析错误问题。解决方案是在扩展规则中添加 `cloud=AzureChinaCloud` 参数,以适配中国区 Azure 环境。内容涵盖问题描述、原因分析、解决方法及配置示例,适用于使用 KEDA 实现事件驱动自动缩放的场景。
239 1
|
监控 Serverless 文件存储
函数计算产品使用问题之如何确保新建的实例拉取的是最新的自定义容器镜像
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
225 0
|
Kubernetes Cloud Native 流计算
Flink-12 Flink Java 3分钟上手 Kubernetes云原生下的Flink集群 Rancher Stateful Set yaml详细 扩容缩容部署 Docker容器编排
Flink-12 Flink Java 3分钟上手 Kubernetes云原生下的Flink集群 Rancher Stateful Set yaml详细 扩容缩容部署 Docker容器编排
500 3
|
存储 算法 NoSQL
C++一分钟之-map与set容器详解
【6月更文挑战第21天】C++ STL的`map`和`set`是基于红黑树的关联容器,提供有序存储和高效查找。`map`存储键值对,键唯一,值可重复;`set`仅存储唯一键。两者操作时间复杂度为O(log n)。常见问题包括键的唯一性和迭代器稳定性。自定义比较函数可用于定制排序规则,内存管理需注意适时释放。理解和善用这些工具能提升代码效率。
359 3
|
C++ 容器
C++之set/multiset容器
C++之set/multiset容器
167 1
|
C++ 容器
C++之deque容器(构造、赋值、大小、插入与删除、存取、排序)
C++之deque容器(构造、赋值、大小、插入与删除、存取、排序)
300 1
|
C++ 容器
C++中自定义结构体或类作为关联容器的键
C++中自定义结构体或类作为关联容器的键
226 0
|
存储 语音技术 Python
语音识别,函数综合案例,黑马ATM,/t/t一个对不齐,用两个/t,数据容器入门,数据容器可以分为列表(list)、元组(tuple)、字符串(str)、集合(set)、字典(dict)
语音识别,函数综合案例,黑马ATM,/t/t一个对不齐,用两个/t,数据容器入门,数据容器可以分为列表(list)、元组(tuple)、字符串(str)、集合(set)、字典(dict)
|
编译器 C++ 容器
通过红黑树封装 map 和 set 容器
通过红黑树封装 map 和 set 容器

热门文章

最新文章