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


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


先决条件: 随机访问迭代器,双向迭代器

Setsassociative container 的一种类型,其中每个元素必须是唯一的,因为元素的值可以标识它。元素的值一旦添加到集合中就无法修改,但可以删除和添加该元素的修改值。

与 Set 相关的函数:

本文重点介绍 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


相关用法


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