public member function
<set>

std::multiset::lower_bound

iterator lower_bound (const value_type& val) const;
const_iterator lower_bound (const value_type& val) const;      iterator lower_bound (const value_type& val);
返回指向不小于 val 的第一个元素的迭代器
返回一个迭代器,指向容器中第一个不被认为在 val 之前的元素(即,该元素等于 val 或在 val 之后)。

该函数使用其内部的 比较对象key_comp)来确定这一点,返回一个指向第一个满足以下条件的元素的迭代器:key_comp(element,val)返回false.

如果 multiset 类使用默认比较类型(less)进行实例化,则该函数返回一个指向第一个不小于 val 的元素的迭代器。

一个类似的成员函数 upper_bound 的行为与此相同,lower_bound除了在 multiset 包含与 val 等效的元素时:在这种情况下,lower_bound它返回一个指向此类元素中的第一个元素的迭代器,而 upper_bound 返回一个指向最后一个元素的下一个元素的迭代器。

参数

val
要比较的值。
成员类型value_type是容器中元素的类型,在 multiset 中定义为其第一个模板参数(T).

返回值

)的别名。返回指向容器中第一个不被认为在 val 之前的元素的迭代器,或者如果所有元素都被认为在 val 之前,则返回 multiset::end

成员类型iteratorconst_iterator是指向元素的 双向迭代器 类型。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// multiset::lower_bound/upper_bound
#include <iostream>
#include <set>

int main ()
{
  std::multiset<int> mymultiset;
  std::multiset<int>::iterator itlow,itup;

  for (int i=1; i<8; i++) mymultiset.insert(i*10); // 10 20 30 40 50 60 70

  itlow = mymultiset.lower_bound (30);             //       ^
  itup = mymultiset.upper_bound (40);              //             ^

  mymultiset.erase(itlow,itup);                    // 10 20 50 60 70

  std::cout << "mymultiset contains:";
  for (std::multiset<int>::iterator it=mymultiset.begin(); it!=mymultiset.end(); ++it)
    std::cout << ' ' << *it;
  std::cout << '\n';

  return 0;
}

请注意,lower_bound(30)返回指向30的迭代器,而upper_bound(40)返回指向50.
mymultiset contains: 10 20 50 60 70


复杂度

size 取对数。

迭代器有效性

没有变化。

数据竞争

访问容器(const 和非 const 版本都不会修改容器)。
同时访问 multiset 的元素是安全的。

异常安全

强保证:如果抛出异常,容器没有发生变化。

另见