C++ multiset upper_bound()
C++ multiset upper_bound()
C++ multiset upper_bound()函数用于返回指向 multiset 容器中较大值的迭代器
语法
iterator upper_bound (const value_type& val) const; //until C++ 11
iterator upper_bound (const value_type& val); //since C++ 11
const_iterator upper_bound (const value_type& val) const; //since C++ 11
参数
val : 要在 multiset 容器中搜索的值。
返回值
upper_bound()函数返回一个迭代器,该迭代器指向 multiset 容器中的值,该值大于参数中传递的val。如果没有这样的元素,则返回end()。
复杂度
大小为对数。
迭代器有效性
没有更改。
数据争用
访问了容器(const和非const版本都不能修改 multiset 容器)。
同时访问容器的元素是安全的。
异常
如果引发异常,则 multiset 合中没有任何更改。
示例1
让我们看一个简单的示例来获取给定值的上限:
#include <iostream>
#include <set>
using namespace std;
int main(void) {
multiset<char> m = {'a', 'b', 'c', 'b'};
auto it = m.upper_bound('b');
cout << "Upper bound of b is(>): " << *it << endl;
return 0;
}
输出:
Upper bound of b is(>): c
在上面的示例中,当我们尝试找到元素b的上限时,它将返回元素b的更大元素,即c
示例2
让我们看一个简单的示例,从下限到上限删除 multiset 的元素:
#include <iostream>
#include <set>
using namespace std;
int main ()
{
multiset<int> mymultiset;
multiset<int>::iterator itlow,itup;
for (int i=1; i<10; i++) mymultiset.insert(i*10); // 10 20 30 40 50 60 70 80 90
itlow=mymultiset.lower_bound (30); // ^
itup=mymultiset.upper_bound (60); // ^
mymultiset.erase(itlow,itup); // 10 20 70 80 90
cout << "mymultiset contains:";
for (multiset<int>::iterator it=mymultiset.begin(); it!=mymultiset.end(); ++it)
cout << ' ' << *it;
cout << '\n';
return 0;
}
输出:
mymultiset contains: 10 20 70 80 90
在上面的示例中,delete()函数将multiset的元素从下限(=)擦除到上限(>),并打印其余内容。
示例3
让我们看一个简单的示例:
#include<iostream>
#include<set>
using namespace std;
int main()
{
// initialize container
multiset<int> mp;
// insert elements in random order
mp.insert( 12 );
mp.insert( 11 );
mp.insert( 15 );
mp.insert( 14 );
// when 11 is present
auto it = mp.upper_bound(11);
cout << "The upper bound of key 11 is ";
cout << (*it)<< endl;
// when 13 is not present
it = mp.upper_bound(13);
cout << "The upper bound of key 13 is ";
cout << (*it)<< endl;
// when 17 is exceeds the maximum key, so size
// of mp is returned as key and value as 0.
it = mp.upper_bound(17);
cout << "The upper bound of key 17 is ";
cout << (*it);
return 0;
}
输出:
The upper bound of key 11 is 12
The upper bound of key 13 is 14
The upper bound of key 17 is 4
在上面的示例中,当我们尝试查找 multiset 容器中不存在但未超过最大值的值的上限时,它将返回更大的值
i.e。当我们试图找到13的上限时,它将返回14,而当我们试图找到一个在 multiset 中不存在且超过容器最大值的值的上限时,它将返回到end()。
示例4
让我们看一个简单的示例:
#include <set>
#include <iostream>
int main( )
{
using namespace std;
multiset <int> s1;
multiset <int> :: const_iterator s1_AcIter, s1_RcIter;
s1.insert( 10 );
s1.insert( 20 );
s1.insert( 30 );
s1_RcIter = s1.upper_bound( 20 );
cout << "The first element of multiset s1 with a key greater "
<< "than 20 is: " << *s1_RcIter << "." << endl;
s1_RcIter = s1.upper_bound( 30 );
// if no match is found for the key, end( ) is returned
if ( s1_RcIter == s1.end( ) )
cout << "The multiset s1 doesn't have an element "
<< "with a key greater than 30." << endl;
else
cout << "The element of multiset s1 with a key > 40 is: "
<< *s1_RcIter << "." << endl;
// The element at a specific location in the multiset can be found
// by using a dereferenced iterator addressing the location
s1_AcIter = s1.begin( );
s1_RcIter = s1.upper_bound( *s1_AcIter );
cout << "The first element of s1 with a key greater than"
<< endl << "that of the initial element of s1 is: "
<< *s1_RcIter << "." << endl;
return 0;
}
输出:
The first element of multiset s1 with a key greater than 20 is: 30.
The multiset s1 doesn't have an element with a key greater than 30.
The first element of s1 with a key greater than
that of the initial element of s1 is: 20.