先决条件: C++ 中的随机访问迭代器,C++ 中的双向迭代器.
C++ 中的 std::lower_bound:
lower_bound中的方法C++用于返回指向范围中第一个元素的迭代器[第一个,最后一个]其值不小于给定值。这意味着该函数返回刚好大于该数字的下一个最小数字的索引。
C++ 中的 std::set::lower_bound:
set lower_bound()是一个内置函数C++ STL它返回一个指向容器中元素的迭代器,相当于K传入参数。如果 K 不存在于设置容器,该函数返回一个指向下一个元素的迭代器,该元素恰好大于K。如果参数中传入的key超过了容器中的最大值,那么迭代器返回的指向集合容器中的最后一个元素。
下面是之间的区别std::lower_bound和std::set::lower_bound:
编号 | std::lower_bound() | std::set::lower_bound() |
---|---|---|
1 | 用法:std::lower_bound(ForwardIterator 首先,ForwardIterator 最后,const T& val)。 | 用法:std::lower_bound(const value_type& val)。 |
2 | std::lower_bound 具有随机访问迭代器和非随机访问迭代器。 | std::set::lower_bound 具有双向迭代器。 |
3 | 此函数优化了比较次数,这对于随机访问迭代器来说非常有效。 | 此函数使用双向迭代器优化比较次数 |
4 | 对于随机访问迭代器,运行时间复杂度为 O(log2N),但对于非随机访问迭代器,运行时间复杂度为 O(N)。 | 由于它是二叉搜索树实现,因此运行时间复杂度始终为 O(log2N)。 |
下面是CPU execution time 的程序,它将说明两个函数的运行时间。
程序来说明std::lower_bound():
// C++ program to illustrate
// std::set::lower_bound
#include <bits/stdc++.h>
#include <sys/time.h>
using namespace std;
// Function whose time is to
// be measured
void fun()
{
// Initialise the set
set<int> s;
// Insert element in the set
for (int i = 0; i < 10; i++) {
s.insert(i);
}
// Use lower_bound() function
// to find 5
set<int>::iterator it;
it = lower_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
fun();
// Stop timer
gettimeofday(&end, NULL);
// Calculating total time taken
// by the program.
double time_taken;
time_taken = (end.tv_sec
- start.tv_sec)
* 1e6;
time_taken = (time_taken
+ (end.tv_usec
- start.tv_usec))
* 1e-6;
cout << "Time taken by program is : "
<< fixed
<< time_taken << setprecision(6);
cout << " sec" << endl;
return 0;
}
输出:
Time taken by program is : 0.000046 sec
程序来说明std::set::lower_bound():
// C++ program to illustrate
// std::lower_bound
#include <bits/stdc++.h>
#include <sys/time.h>
using namespace std;
// Function whose time is to
// be measured
void fun()
{
// Initialise the set
set<int> s;
// Insert element in the set
for (int i = 0; i < 10; i++) {
s.insert(i);
}
// Use set::lower_bound() function
// to find 5
set<int>::iterator it;
it = s.lower_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);
fun();
// Stop timer
gettimeofday(&end, NULL);
// Calculating total time taken
// by the program.
double time_taken;
time_taken = (end.tv_sec
- start.tv_sec)
* 1e6;
time_taken = (time_taken
+ (end.tv_usec
- start.tv_usec))
* 1e-6;
cout << "Time taken by program is : "
<< fixed
<< time_taken << setprecision(6);
cout << " sec" << endl;
return 0;
}
输出:
Time taken by program is : 0.000039 sec
相关用法
- C++ std::set::upper_bound和std::upper_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用法及代码示例
注:本文由纯净天空筛选整理自yash2040大神的英文原创作品 Difference between std::set::lower_bound and std::lower_bound in C++。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。