C++ 中 std::set::upper_bound 和 std::upper_bound 的区别

17 Mar 2025 | 4 分钟阅读

在本文中,我们将讨论 C++ 中 std::upper_boundstd::set::upper_bound 方法之间的区别。但在讨论它们的区别之前,我们必须了解 std::upper_bound 和 std::set::upper_bound 方法及其语法和示例。

std::set::upper_bound 是什么?

它是 std::set 容器类的一个成员函数。它返回一个迭代器,指向 set 中第一个大于指定值的元素。

语法

它具有以下语法:

其中 "T" 是存储在 set 容器中的元素

"value" 是要搜索的值。

示例

让我们看一个例子来演示 C++ 中的 std::set::upper_bound() 函数。

输出

Difference between std::set::upper_bound and std::upper_bound in C++

说明

上述程序中有两个函数。findNextAvailableSlot 函数中的变量 bookedSlots 表示已预订的时间段,proposedStartTime 表示会议的开始时间。此函数使用 bookedSlots 中在 proposedStartTime 之后开始的第一个预订时段。如果找到时段,则返回开始时间;否则,返回 -1。

主函数有三个变量:bookedSlots,表示已预订的时间段;proposedStartTime,表示新会议的开始时间;以及 nextAvailableSlot,用于存储函数的结果。此函数将创建一组预订时间。它检查结果并根据是否有可用时段打印适当的消息。

set::upper_bound 是什么?

它是 C++ 标准模板库中的一个通用算法。我们使用 <algorithm> 头文件将其包含在我们的程序中。它将返回一个迭代器,指向范围中第一个大于指定值的元素。

语法

它具有以下语法:

"ForwardIt" 是一种迭代器类型。

"first" 和 "last" 迭代器定义了要搜索的范围。

"value" 是要搜索的值。

示例

让我们看一个 C++ 程序来演示 std::upper_bound 函数

输出

Difference between std::set::upper_bound and std::upper_bound in C++

说明

此程序与上一个程序的功能相同,但实现方式不同。findNextAvailableSlot 函数使用 std::upper_bound,并使用从 bookedSlots.begin()bookedSlots.end() 获取的迭代器。程序的其余逻辑与上一个程序相同。

std::upper_bound 和 std::set::upper_bound 的主要区别

Difference between std::set::upper_bound and std::upper_bound in C++

C++ 中 std::upper_boundstd::set::upper_bound 方法之间有几个区别。这些方法之间的一些主要区别如下:

特点std::set::upper_boundstd::upper_bound
背景它是 std::set 容器类的一个成员函数。是通用算法
容器依赖性它特定于容器。它可以应用于任何排序的范围,不一定是 set。
调用语法此函数通过在 set 对象上使用成员函数来调用。它是模板函数。它接受指向范围开头和结尾的迭代器以及搜索值。
命名空间它是 std 命名空间的一部分,特定于 set 容器。它也具有 std 命名空间,但适用于许多容器。
头文件使用 <set> 头文件使用 <algorithm> 头文件
返回类型它返回一个指向找到的元素的迭代器。它也返回一个迭代器,但取决于所使用的迭代器类型。
容器修改它不会修改 set。它也不会修改 set。
访问元素它具有双向迭代器。它具有随机访问迭代器。
运行时复杂度它需要 O(log2N)对于随机访问迭代器,它需要 O(log2N),但对于非随机访问迭代器,它需要 O(N)。
迭代器要求它从键获取输入并根据键返回迭代器。它直接对迭代器操作,而不是键。