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

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

集合是一种关联容器,其中每个元素都必须唯一,因为元素的值标识了它。一旦将元素添加到集合中,其值就不能被修改,尽管可以删除并添加该元素的修改值。

与Set相关的功能:

  • begin() 返回指向集合中第一个元素的迭代器。
  • end() 返回指向集合中最后一个元素之后的理论元素的迭代器。
  • size() 返回集合中元素的数量。
  • max_size() 返回集合可以容纳的最大元素数量。
  • empty() 返回集合是否为空。

本文重点介绍C++中std::set::upper_bound和std::upper_bound之间的区别。

C++中的std::upper_bound()

C++中的upper_bound()方法用于返回指向范围[first,last)中第一个大于给定值的元素的迭代器。

C++中的std::set::upper_bound()

set::upper_bound()是C++ STL中的内置函数,它返回指向容器中刚刚大于传递的值“x”的元素的迭代器。如果传递的参数键超过容器中的最大值,则返回的迭代器指向set容器中的最后一个元素。

std::upper_bound() vs std::set::upper_bound()

下面是std::upper_bound()和std::set::upper_bound()之间的一些差异。

序号 std::upper_bound() std::set::upper_bound()
1 语法 -std::upper_bound(ForwardIterator first,ForwardIterator last,const T& val)。 语法 -std::upper_bound(const value_type& val)。
2 std::upper_bound具有随机访问迭代器和非随机访问迭代器。 std::set::upper_bound优化了双向迭代器。
3 此函数通过随机访问迭代器优化比较次数,这对于随机访问迭代器是有效的。 此函数使用双向迭代器优化比较次数。
4 对于随机访问迭代器,运行时间复杂度为O(log2N),但对于非随机访问迭代器,它为O(N)。 运行时间复杂度始终为O(log2N),因为它采用了二叉搜索树实现。

在下面的示例中,我们说明了两个函数所需的CPU执行时间。通常情况下,首选std::set::upper_bound()方法。

示例:std::upper_bound()

下面是用于说明std::upper_bound()函数的C++程序。

// C ++程序,说明
// std :: set :: upper_bound
#include 
#include 
using namespace std;

// 要测量时间的功能
void myFunction()
{
    // 初始化集合
    set s;

    // 在集合中插入元素
    for(int i = 0; i <10; i ++){
        s.insert(i);
    }

    // 使用upper_bound()函数查找5
    set :: iterator it;
    it = upper_bound(s.begin(),s.end(),5);
}

// 驱动程序
int main()
{
    // 使用函数 gettimeofday()
    // 可以获取时间
    struct timeval start, end;

    // 开始计时器
    gettimeofday(&start,NULL);

    // 不同步C和C++的I / O。
    ios_base :: sync_with_stdio(false);

    // 函数调用
    myFunction();

    // 停止计时器
    gettimeofday(&end,NULL);

    // 计算程序所用的总时间。
    double totalTime;

    totalTime =(end.tv_sec- start.tv_sec)* 1e6;

    totalTime
         =(totalTime +(end.tv_usec- start.tv_usec))
           * 1e-6;

    cout << "程序所用的时间是:" << fixed
         << totalTime << setprecision(6);
    cout << "秒" << endl;
    return 0;
}  

输出

程序所用的时间是:0.000056秒

例:std :: set :: upper_bound()

下面是C ++程序,说明std :: set :: upper_bound()函数。

// C ++程序,说明
// std :: upper_bound
#include 
#include 
using namespace std;

// 要测量时间的功能
void myFunction()
{
    // 初始化集合
    set s;

    // 在集合中插入元素
    for(int i = 0; i <10; i ++){
        s.insert(i);
    }

    // 使用set :: upper_bound()函数查找5
    set :: iterator it;
    it = s.upper_bound(5);
}

// 驱动程序
int main()
{
    // 使用函数 gettimeofday()
    // 可以获取时间
    struct timeval start, end;

    // 开始计时器
    gettimeofday(&start,NULL);

    // 不同步C和C++的I / O。
    ios_base :: sync_with_stdio(false);

    myFunction();

    // 停止计时器
    gettimeofday(&end,NULL);

    // 计算程序所用的总时间。
    double totalTime;

    totalTime =(end.tv_sec- start.tv_sec)* 1e6;

    totalTime
         =(totalTime +(end.tv_usec- start.tv_usec))
           * 1e-6;

    cout << "程序所用的时间是:" << fixed
         << totalTime << setprecision(6);
    cout << "秒" << endl;
    return 0;
}  

输出

程序所用的时间是:0.000043秒

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程