Sets 是 associative container 的一种类型,其中每个元素必须是唯一的,因为元素的值可以标识它。元素的值一旦添加到集合中就无法修改,但可以删除和添加该元素的修改值。
与 Set 相关的函数:
- set::begin()、set::end():返回指向集合中第一个元素的迭代器。
- set::begin()、set::end():返回一个迭代器,指向集合中最后一个元素后面的理论元素。
- set::size():返回集合中元素的数量。
- set max_size():返回集合可以容纳的最大元素数。
- set::empty():返回集合是否为空。
本文重点介绍 C++ 中 std::set::upper_bound 和 std::upper_bound 之间的区别。
C++ 中的 std::upper_bound()
C++中的upper_bound()方法用于返回一个iterator,指向[first,last)范围内第一个值大于给定值的元素。
C++ 中的 std::set::upper_bound()
set::upper_bound() 是 C++ STL 中的内置函数,它返回一个指向容器中元素的迭代器,该元素仅大于作为参数传递的值 ‘x’。如果参数中传入的key超过了容器中的最大值,那么迭代器返回的指向集合容器中的最后一个元素。
std::upper_bound() 与 std::set::upper_bound()
以下是 std::upper_bound() 和 std::set::upper_bound() 之间的一些差异。
先生。没有。 | std::upper_bound() | std::set::upper_bound() |
1 | 句法- std::upper_bound(ForwardIterator 首先,ForwardIterator 最后,const T& val)。 |
句法- std::upper_bound(const value_type& val)。 |
2 | std::upper_bound 具有随机访问迭代器和非随机访问迭代器。 | std::set::upper optimizes_bound 具有双向迭代器。 |
3 | 此函数优化了比较次数,这对于随机访问迭代器来说非常有效。 | 此函数优化使用双向迭代器的比较次数。 |
4 | 对于随机访问迭代器,运行时间复杂度为 O(log2N),但对于非随机访问迭代器,运行时间复杂度为 O(N)。 | 由于其二叉搜索树的实现,运行时间复杂度始终为 O(log2N)。 |
在下面的示例中,我们说明了两个函数占用的 CPU 执行时间。一般来说,std::set::upper_bound()方法优于std::upper_bound()。
示例:std::upper_bound()
下面是说明 std::upper_bound() 函数的 C++ 程序。
C++
// C++ program to illustrate
// std::set::upper_bound
#include <bits/stdc++.h>
#include <sys/time.h>
using namespace std;
// Function whose time is to
// be measured
void myFunction()
{
// Initialise the set
set<int> s;
// Insert element in the set
for (int i = 0; i < 10; i++) {
s.insert(i);
}
// Use upper_bound() function
// to find 5
set<int>::iterator it;
it = upper_bound(s.begin(), s.end(), 5);
}
// Driver Code
int main()
{
// Use function gettimeofday()
// can get the time
struct timeval start, end;
// Start timer
gettimeofday(&start, NULL);
// unsync the I/O of C and C++.
ios_base::sync_with_stdio(false);
// Function Call
myFunction();
// Stop timer
gettimeofday(&end, NULL);
// Calculating total time taken
// by the program.
double totalTime;
totalTime = (end.tv_sec - start.tv_sec) * 1e6;
totalTime
= (totalTime + (end.tv_usec - start.tv_usec))
* 1e-6;
cout << "Time taken by the program is : " << fixed
<< totalTime << setprecision(6);
cout << " sec" << endl;
return 0;
}
Time taken by the program is : 0.000056 sec
示例: std::set::upper_bound()
下面是说明 std::set::upper_bound() 函数的 C++ 程序。
C++
// C++ program to illustrate
// std::upper_bound
#include <bits/stdc++.h>
#include <sys/time.h>
using namespace std;
// Function whose time is to
// be measured
void myFunction()
{
// Initialise the set
set<int> s;
// Insert element in the set
for (int i = 0; i < 10; i++) {
s.insert(i);
}
// Use set::upper_bound() function
// to find 5
set<int>::iterator it;
it = s.upper_bound(5);
}
// Driver Code
int main()
{
// Use function gettimeofday()
// can get the time
struct timeval start, end;
// Start timer
gettimeofday(&start, NULL);
// unsync the I/O of C and C++.
ios_base::sync_with_stdio(false);
myFunction();
// Stop timer
gettimeofday(&end, NULL);
// Calculating total time taken
// by the program.
double totalTime;
totalTime = (end.tv_sec - start.tv_sec) * 1e6;
totalTime
= (totalTime + (end.tv_usec - start.tv_usec))
* 1e-6;
cout << "Time taken by program is : " << fixed
<< totalTime << setprecision(6);
cout << " sec" << endl;
return 0;
}
Time taken by program is : 0.000043 sec
相关用法
- C++ std::set::lower_bound和std::lower_bound的区别用法及代码示例
- C++ std::set_difference用法及代码示例
- C++ std::set_intersection用法及代码示例
- C++ std::set_union用法及代码示例
- C++ std::search用法及代码示例
- C++ std::search_n用法及代码示例
- C++ std::swap()用法及代码示例
- C++ std::strncmp()用法及代码示例
- C++ std::sort()用法及代码示例
- C++ std::stable_partition用法及代码示例
- C++ std::stof用法及代码示例
- C++ std::stol()、std::stoll()用法及代码示例
- C++ std::string::append()用法及代码示例
- C++ std::string::assign()用法及代码示例
- C++ std::string::back()用法及代码示例
- C++ std::string::clear用法及代码示例
- C++ std::string::compare()用法及代码示例
- C++ std::string::data()用法及代码示例
- C++ std::string::erase用法及代码示例
- C++ std::string::find_first_not_of用法及代码示例
- C++ std::string::find_last_not_of用法及代码示例
- C++ std::string::insert()用法及代码示例
- C++ std::string::push_back()用法及代码示例
- C++ std::string::resize()用法及代码示例
- C++ std::swap_ranges用法及代码示例
注:本文由纯净天空筛选整理自bhuwanesh大神的英文原创作品 Difference between std::set::upper_bound and std::upper_bound in C++。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。