Sets 是 associative container 的一種類型,其中每個元素必須是唯一的,因為元素的值可以標識它。元素的值一旦添加到集合中就無法修改,但可以刪除和添加該元素的修改值。
與 Set 相關的函數:
- set::begin()、set::end():返回指向集合中第一個元素的迭代器。
- set::begin()、set::end():返回一個迭代器,指向集合中最後一個元素後麵的理論元素。
- set::size():返回集合中元素的數量。
- set max_size():返回集合可以容納的最大元素數。
- set::empty():返回集合是否為空。
本文重點介紹 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
相關用法
- C++ std::set::lower_bound和std::lower_bound的區別用法及代碼示例
- C++ std::set_difference用法及代碼示例
- C++ std::set_intersection用法及代碼示例
- C++ std::set_union用法及代碼示例
- C++ std::search用法及代碼示例
- C++ std::search_n用法及代碼示例
- C++ std::swap()用法及代碼示例
- C++ std::strncmp()用法及代碼示例
- C++ std::sort()用法及代碼示例
- C++ std::stable_partition用法及代碼示例
- C++ std::stof用法及代碼示例
- C++ std::stol()、std::stoll()用法及代碼示例
- C++ std::string::append()用法及代碼示例
- C++ std::string::assign()用法及代碼示例
- C++ std::string::back()用法及代碼示例
- C++ std::string::clear用法及代碼示例
- C++ std::string::compare()用法及代碼示例
- C++ std::string::data()用法及代碼示例
- C++ std::string::erase用法及代碼示例
- C++ std::string::find_first_not_of用法及代碼示例
- C++ std::string::find_last_not_of用法及代碼示例
- C++ std::string::insert()用法及代碼示例
- C++ std::string::push_back()用法及代碼示例
- C++ std::string::resize()用法及代碼示例
- C++ std::swap_ranges用法及代碼示例
注:本文由純淨天空篩選整理自bhuwanesh大神的英文原創作品 Difference between std::set::upper_bound and std::upper_bound in C++。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。