public member function
<map>

std::multimap::equal_range

pair<const_iterator,const_iterator> equal_range (const key_type& k) const;pair<iterator,iterator>             equal_range (const key_type& k);
獲取相等元素的範圍
返回一個範圍的邊界,該範圍包含容器中所有 key 等於 k 的元素。

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

當容器的比較物件返回false自反地(即,無論鍵以何種順序作為引數傳遞),則認為兩個 key 是相等的。

引數

k
要搜尋的鍵。
成員型別key_type是在 multimap 中定義的、其第一個模板引數的別名().

返回值

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

如果 multimap 物件是 const 限定的,則該函式返回一對const_iterator。否則,它返回一對iterator.

成員型別iteratorconst_iterator是指向元素的(型別為value_type).
請注意,value_typemultimap 容器中本身也是一個 pair 型別pair<const key_type, mapped_type>.

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
// 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 版本都不會修改容器)。
不訪問對映值:併發訪問或修改元素是安全的。

異常安全

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

另見