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 的元素是安全的。

异常安全

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

另见