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

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

C++中的std::lower_bound:

在C++中,lower_bound()方法用于返回一个迭代器,该迭代器指向指定范围内第一个值不小于给定值的元素。这意味着该函数返回比该数字稍大的下一个最小数字的索引。

C++中的std::set::lower_bound:

std::set::lower_bound()是C++ STL中的内置函数,它返回指向容器中等于参数传递的 K 的元素的迭代器。如果在 set 容器中不存在K,则该函数返回一个指向接下来一个刚好大于 K 的元素的迭代器。如果在参数中传递的键超过了容器中的最大值,则迭代器返回指向set容器中的最后一个元素。

下面是 std::lower_boundstd::set::lower_bound 之间的区别:

序号 std::lower_bound() std::set::lower_bound()
1 语法:std::lower_bound(ForwardIterator first, ForwardIterator last, const T& val)。 语法:std::lower_bound(const value_type& val)。
2 std::lower_bound具有随机访问迭代器和非随机访问迭代器。 std::set::lower_bound具有双向迭代器。
3 该函数通过使用随机访问迭代器优化比较的次数,这对于随机访问迭代器是有效的。 该函数使用双向迭代器优化比较的次数。
4 对于随机访问迭代器,其运行时间复杂度为 O(log 2 N),但对于非随机访问迭代器,其运行时间复杂度为 O(N)。 由于其二叉查找树的实现方式,其运行时间复杂度始终为 O(log 2 N)。

下面是 CPU 执行时间的程序,用于说明这两个函数的运行时间。

讲解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 << "程序执行时间为:"
         << fixed
         << time_taken << setprecision(6);
    cout << " 秒" << endl;
    return 0;
}
程序所耗时间为:0.000046秒

演示 std::set::lower_bound() 的程序:

//C++程序演示
//std::lower_bound
#include <bits/stdc++.h>
#include <sys/time.h>
using namespace std;

//要测量时间的函数
void fun()
{
    //初始化集合
    set<int> s;

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

    //使用set::lower_bound()函数查找5
    set<int>::iterator it;
    it = s.lower_bound(5);
}

//主函数
int main()
{
    //使用gettimeofday()函数计算时间
    struct timeval start, end;

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

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

    fun();

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

    //计算程序所用总时间
    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 << "程序所耗时间为:"
         << fixed
         << time_taken << setprecision(6);
    cout << "秒" << endl;
    return 0;
}
程序所耗时间为:0.000039秒

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程