公有成員函式
<set>

std::multiset::upper_bound

iterator upper_bound (const value_type& val) const;
const_iterator upper_bound (const value_type& val) const;      iterator upper_bound (const value_type& val);
返回指向上界的迭代器
返回一個迭代器,該迭代器指向容器中被認為在 val 之後的第一個元素。

該函式使用其內部的 比較物件 (key_comp) 來確定這一點,返回第一個滿足以下條件的元素的迭代器:key_comp(val,element)返回true.

如果 multiset 類是用預設比較型別 (less) 例項化的,則該函式返回一個大於 val 的第一個元素的迭代器。

一個類似的成員函式 lower_bound 的行為與upper_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(60)返回指向70.
mymultiset contains: 10 20 50 60 70


複雜度

size 取對數。

迭代器有效性

沒有變化。

資料競爭

訪問容器(const 和非 const 版本都不會修改容器)。
同時訪問 multiset 的元素是安全的。

異常安全

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

另見