📜  C++ 中 std::set::upper_bound 和 std::upper_bound 的区别(1)

📅  最后修改于: 2023-12-03 14:39:54.312000             🧑  作者: Mango

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

在 C++ 中,std::set::upper_boundstd::upper_bound 都是与查找有序范围中大于给定值的第一个位置相关的函数。尽管它们具有相似的名称和功能,但它们实际上是不同的函数,用法和用途也不同。

std::set::upper_bound

std::set::upper_boundstd::set 容器类的成员函数。它用于返回大于给定元素的第一个迭代器。

iterator upper_bound (const key_type& key);
  • key_type:要查找的元素。

std::set 是一个有序不重复元素的容器,它基于红黑树的数据结构实现。std::set::upper_bound 返回的是集合中大于给定元素的第一个元素的迭代器。如果不存在这样的元素,则返回 end()

示例用法:

std::set<int> mySet = {10, 20, 30, 40, 50};   
auto it = mySet.upper_bound(25);

在上面的示例中,it 将指向大于 25 的第一个元素,即 30。

std::upper_bound

std::upper_bound 是一个全局算法函数,位于 <algorithm> 头文件中。它用于返回大于给定值的第一个位置。

ForwardIt upper_bound (ForwardIt first, ForwardIt last, const T& value);
  • firstlast:要查找的范围。
  • value:要比较的值。

std::upper_bound 可用于任何有序的范围(如数组、向量等)。它返回的是大于给定值的第一个位置的迭代器。如果不存在这样的值,则返回的是 std::upper_bound 的第二个参数 last

示例用法:

std::vector<int> myVec = {10, 20, 30, 40, 50};   
auto it = std::upper_bound(myVec.begin(), myVec.end(), 25);

在上面的示例中,it 将指向大于 25 的第一个元素,即 30。

区别总结

总结一下 std::set::upper_boundstd::upper_bound 的区别:

  • std::set::upper_boundstd::set 类的成员函数,std::upper_bound 是全局算法函数。
  • std::set::upper_bound 只能用于有序不重复集合,std::upper_bound 可用于任何有序范围。
  • std::set::upper_bound 的参数是要查找的元素值,std::upper_bound 的参数是要比较的值。
  • std::set::upper_bound 返回的是迭代器,std::upper_bound 返回的是位置值。

通过理解和掌握 std::set::upper_boundstd::upper_bound 的区别,程序员可以根据具体情况选择合适的函数来实现查找操作。