public member function
<set>

std::set::lower_bound

iterator lower_bound (const value_type& val) const;
      iterator lower_bound (const value_type& val);const_iterator lower_bound (const value_type& val) const;
返回指向下界的迭代器
返回一個迭代器,指向容器中第一個不被認為在 val 之前的元素(即,它要麼等於 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

成員型別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
// 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


複雜度

size 的對數複雜度。

迭代器有效性

沒有變化。

資料競爭

訪問容器(const 和非 const 版本都不會修改容器)。
併發訪問set的元素是安全的。

異常安全

強保證:如果丟擲異常,容器沒有發生變化。

另見