set容器-内置类型指定排序规则讲解

简介: set容器-内置类型指定排序规则讲解

set 容器是 C++ 标准模板库(STL)中的一个关联容器,它存储的元素都是唯一的,并且默认按升序排列。set 容器内部通常是通过红黑树(一种自平衡的二叉搜索树)来实现的,因此其插入、删除和查找操作的时间复杂度都是对数级别的。在默认情况下,set 容器使用 less<Key> 作为比较对象,以决定元素在容器中的排序方式。

 

然而,在某些场景下,我们可能希望使用自定义的排序规则来存储元素。这时,可以通过为 set 指定自定义的比较函数对象或函数指针来实现。下面,我将详细讲解如何为 set 容器指定内置类型的排序规则,并给出相应的代码示例。

 

自定义排序规则

为 set 容器指定自定义排序规则,我们需要提供一个比较函数对象或函数指针,它应该能够接受两个参数(即 set 中元素的类型),并返回一个布尔值来表示这两个元素的大小关系。

 

比较函数对象通常是通过重载 operator() 来定义的,而函数指针则指向一个接受相同参数并返回布尔值的函数。

 

示例:为 set<int> 指定降序排序规则

假设我们想要创建一个 set 容器,用于存储整数,并希望这些整数按照降序排列。为了实现这一点,我们可以定义一个比较函数对象或函数,并在创建 set 容器时将其作为模板参数传递。

 

使用函数对象

image.png

image.png

在这个例子中,我们定义了一个名为 CompareDesc 的比较函数对象,它重载了 operator() 来实现降序比较。然后,在创建 set 容器时,我们将 CompareDesc 作为第二个模板参数传递,以指定自定义的排序规则。

 

使用函数指针

除了使用函数对象外,我们还可以使用函数指针来指定自定义排序规则。这通常涉及到定义一个全局函数或静态成员函数,并将其地址作为比较对象传递给 set。

image.png image.png

在这个例子中,我们定义了一个全局函数 compareDesc,它接受两个整数参数并返回一个布尔值来表示它们的大小关系。然后,在创建 set 容器时,我们将 compareDesc 函数的地址作为比较对象传递给 set 的构造函数。

 

总结

通过为 set 容器指定自定义的比较函数对象或函数指针,我们可以灵活地控制容器中元素的排序规则。这为我们提供了更多的可能性,以满足不同场景下的排序需求。在实际应用中,我们可以根据具体需求选择使用函数对象还是函数指针,并编写相应的比较逻辑来实现自定义排序。无论是使用函数对象还是函数指针,都需要确保比较逻辑的正确性,以避免出现意外的排序结果。

目录
相关文章
|
4月前
|
存储 Java 开发者
Java 中 Set 类型的使用方法
【10月更文挑战第30天】Java中的`Set`类型提供了丰富的操作方法来处理不重复的元素集合,开发者可以根据具体的需求选择合适的`Set`实现类,并灵活运用各种方法来实现对集合的操作和处理。
|
4月前
|
开发者
除了交集运算,Set 类型还可以用于哪些数据结构的操作?
【10月更文挑战第30天】`Set`类型在数据结构操作方面提供了丰富的功能和便利,能够帮助开发者更高效地处理各种数据集合相关的任务,提高代码的简洁性和性能。
|
4月前
|
JavaScript 前端开发 开发者
set类型可以实现数组去重等
【10月更文挑战第30天】 `Set`类型在JavaScript中提供了一种方便、高效的集合数据结构,在数组去重、集合运算、数据存在性检查等方面都有广泛的应用,能够帮助开发者更简洁、高效地处理数据。
|
4月前
|
JavaScript 前端开发 Java
除了 JavaScript,还有哪些编程语言支持 Set 类型
【10月更文挑战第30天】这些编程语言中的 `Set` 类型虽然在语法和具体实现细节上有所不同,但都提供了类似的集合操作功能,方便开发者在不同的编程场景中处理集合相关的数据和逻辑。
|
4月前
|
算法 JavaScript 前端开发
使用 Set 类型实现数组的交集运算
【10月更文挑战第30天】使用 `Set` 类型实现数组的交集运算是一种常见且有效的方法,它为我们处理数据集合的运算提供了一种便捷的途径。通过合理地运用这种方法,我们可以轻松地实现数组的交集计算,并在各种编程任务中灵活运用。
|
5月前
|
存储 NoSQL Redis
redis-set类型
【10月更文挑战第6天】
72 1
|
5月前
|
存储 分布式计算 NoSQL
大数据-40 Redis 类型集合 string list set sorted hash 指令列表 执行结果 附截图
大数据-40 Redis 类型集合 string list set sorted hash 指令列表 执行结果 附截图
50 3
|
5月前
|
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容器编排
139 3
|
7月前
|
索引 Python 容器
为什么Python中会有集合set类型?
为什么Python中会有集合set类型?
66 3
|
7月前
|
Python
python集合类型 (Set Types)
【8月更文挑战第3天】
103 9