public member function
<set>

std::multiset::equal_range

pair<iterator,iterator> equal_range (const value_type& val) const;
pair<const_iterator,const_iterator> equal_range (const value_type& val) const;pair<iterator,iterator>             equal_range (const value_type& val);
獲取相等元素的範圍
返回包含容器中所有與val等價的元素的範圍的邊界。

如果沒有找到匹配項,則返回的範圍長度為零,兩個迭代器都指向根據容器的內部比較物件key_comp)被認為在val之後的第一元素。

一個multiset的兩個元素被認為是等價的,如果容器的比較物件返回false自反地(也就是說,無論元素以何種順序作為引數傳遞)。

引數

val
要搜尋的值。
成員型別value_type是容器中元素的型別,在multiset中被定義為第一個模板引數(T).

返回值

該函式返回一個 pair,其成員pair::first是範圍的下界(與lower_bound相同),以及pair::second是上界(與upper_bound相同)。

成員型別iteratorconst_iterator是指向元素的雙向迭代器型別。

示例

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

typedef std::multiset<int>::iterator It;  // aliasing the iterator type used

int main ()
{
  int myints[]= {77,30,16,2,30,30};
  std::multiset<int> mymultiset (myints, myints+6);  // 2 16 30 30 30 77

  std::pair<It,It> ret = mymultiset.equal_range(30); //      ^        ^

  mymultiset.erase(ret.first,ret.second);

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

  return 0;
}

multiset contains: 2 16 77


複雜度

複雜度為對數(相對於size)。

迭代器有效性

沒有變化。

資料競爭

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

異常安全

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

另見