Home C&C++函数库 c++ 语法 程序源码 Linux C库

std::

multimap::equal_range

公众成员函数  <map>
pair<const_iterator,const_iterator> equal_range (const key_type& k) const;
pair<iterator,iterator>             equal_range (const key_type& k);

获取相等元素的范围

返回一个范围的边界,该范围包括容器中键值等于k的所有元素。

如果没有找到匹配项,则返回的范围长度为 0,根据容器的内部比较对象(key_comp), 两个迭代器都指向第一个键在k之后的元素。

如果容器的比较对象返回false,则认为两个键是等价的(即,无论键作为参数传递的顺序如何)。

☲  参数


K
要搜索的键。
成员类型key_type是容器中元素的类型,在multimap中定义为其第一个模板参数(Key)的别名。

☉  返回值



该函数返回一个pair,其成员pair::first是范围的下界 (与lower_bound相同),pair::second是范围的上界(与upper_bound相同)。
如果multimap对象是const限定的,则该函数返回一对const_iterator。否则,它返回一对iterator.
成员类型iteratorconst_iterator是指向元素(value_type类型)的双向迭代器类型。
注意,multimap容器中的value_type本身也是一个pair类型: pair<const key_type, mapped_type>

☣  示例



// multimap::equal_range
#include <iostream>
#include <map>

int main ()
{
  std::multimap<char,int> mymm;

  mymm.insert(std::pair<char,int>('a',10));
  mymm.insert(std::pair<char,int>('b',20));
  mymm.insert(std::pair<char,int>('b',30));
  mymm.insert(std::pair<char,int>('b',40));
  mymm.insert(std::pair<char,int>('c',50));
  mymm.insert(std::pair<char,int>('c',60));
  mymm.insert(std::pair<char,int>('d',60));

  std::cout << "mymm contains:\n";
  for (char ch='a'; ch<='d'; ch++)
  {
    std::pair <std::multimap<char,int>::iterator, std::multimap<char,int>::iterator> ret;
    ret = mymm.equal_range(ch);
    std::cout << ch << " =>";
    for (std::multimap<char,int>::iterator it=ret.first; it!=ret.second; ++it)
      std::cout << ' ' << it->second;
    std::cout << '\n';
  }

  return 0;
}

输出:
mymm contains:
a => 10
b => 20 30 40
c => 50 60
d => 60

✥ 复杂度



size 对数.

☣ 迭代器的有效性



不变.

⇄ 数据竞争


访问容器(const和非const版本都不会修改容器)。
不访问映射值:并发访问或修改元素是安全的。

☂ 异常安全性



强保证:如果抛出异常,容器中不会有任何变化。

🍄  另请参阅



multimap::lower_bound 返回迭代器下界(公众成员函数)
multimap::upper_bound 返回迭代器上界(公众成员函数)
multimap::find 获取元素迭代器(公众成员函数)
multimap::count 具有特定值的元素数量(公众成员函数)

联系我们 免责声明 关于CandCplus 网站地图