当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


C++ std::set::lower_bound和std::lower_bound的区别用法及代码示例


先决条件: 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_boundstd::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


相关用法


注:本文由纯净天空筛选整理自yash2040大神的英文原创作品 Difference between std::set::lower_bound and std::lower_bound in C++。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。