std::
set::lower_bound
公众成员函数 <set>
C++98 |
iterator lower_bound (const value_type& val) const; |
C++11 |
iterator lower_bound (const value_type& val);
const_iterator lower_bound (const value_type& val) const; |
返回迭代器下界
返回一个迭代器,指向容器中第一个不被认为在val之前的元素(即,它是等价的或在val之后)。
该函数使用其内部比较对象(key_comp)来确定这一点,
返回一个指向第一个key_comp(element,val)会返回false的元素的迭代器。
如果set类是用默认比较类型(less)实例化的,则该函数返回一个指向第一个不小于val的元素的迭代器。
类似的成员函数upper_bound与lower_bound具有相同的行为,唯一不同的是,
set中包含了一个等价于val的元素:在这种情况下,lower_bound返回指向该元素的迭代器,
而upper_bound返回指向下一个元素的迭代器。
☲ 参数
-
val
-
要比较的值。
成员类型value_type是容器中元素的类型,在set中定义为它的第一个模板形参(T)的别名。
☉ 返回值
指向容器中第一个元素的迭代器,该元素不被认为位于val之前,
如果所有元素都被认为位于val之前,则设置为set::end。
成员类型iterator和const_iterator是指向元素的双向迭代器类型。
☣ 示例
// set::lower_bound/upper_bound
#include <iostream>
#include <set>
int main ()
{
std::set<int> myset;
std::set<int>::iterator itlow,itup;
for (int i=1; i<10; i++) myset.insert(i*10); // 10 20 30 40 50 60 70 80 90
itlow=myset.lower_bound (30); // ^
itup=myset.upper_bound (60); // ^
myset.erase(itlow,itup); // 10 20 70 80 90
std::cout << "myset contains:";
for (std::set<int>::iterator it=myset.begin(); it!=myset.end(); ++it)
std::cout << ' ' << *it;
std::cout << '\n';
return 0;
} |
注意,lower_bound(30)返回一个指向30的迭代器,而upper_bound(60)返回一个指向70的迭代器。
输出:
myset contains: 10 20 70 80 90
✥ 复杂度
集合大小呈对数.
☣ 迭代器的有效性
不变.
⇄ 数据竞争
访问容器(const和非const版本都不会修改容器)。
并发地访问集合的元素是安全的。
☂ 异常安全性
强保证:如果抛出异常,容器中不会有任何变化。
🍄 另请参阅
set::upper_bound |
返回迭代器上界(公众成员函数) |
set::equal_range |
获取相等元素的范围(公众成员函数) |
set::find |
获取元素迭代器(公众成员函数) |
set::count |
具有特定值的元素数量(公众成员函数) |