當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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++。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。