STL庫中的equal_range()


equal_range根據鍵值,返回一對迭代器的pair對象。如果該鍵值在容器中存在,則pair對象中的第一個迭代器指向該鍵關聯的第一個實例,第二個迭代器指向該鍵關聯的最后一個實例的下一位置。如果找不到匹配的元素,則pair對象中的兩個迭代器都將指向此鍵應該插入的位置。總之,equal_range返回迭代器位置區間 [ lower_bound, upper_bound ) 。見以下例子:

#include <iostream>
#include <map>
int main ()
{
  std::multimap<char,int> my_multimap;
  my_multimap.insert(std::make_pair('a',10));
  my_multimap.insert(std::make_pair('a',20));
  my_multimap.insert(std::make_pair('a',30));
  my_multimap.insert(std::make_pair('a',40));
  my_multimap.insert(std::make_pair('b',10));
  my_multimap.insert(std::make_pair('c',10));
  my_multimap.insert(std::make_pair('c',20));
  std::cout << my_multimap.size() << std::endl;
  std::pair<std::multimap<char,int>::iterator,std::multimap<char,int>::iterator> ret;
  ret=my_multimap.equal_range('a');
  for(std::multimap<char,int>::iterator it=ret.first;it !=ret.second;it++){
        std::cout << it->first << " => " << it->second << '\n';
  }
  return 0;
}

輸出:

7
a => 10
a => 20
a => 30
a => 40

從上面例子可以看出,使用了multimap是可以存儲重復的鍵值的,所以使用equal_range開始找'a'鍵,發現滿足條件的有4個,這時返回2個迭代器,第一個迭代器是'a':10這一組鍵值對,第二個迭代器是最后一個'a':40這組滿足條件的鍵值對的后一個鍵值對'b':10。因此迭代打印時就會得到一堆輸出。

如果沒有找到滿足條件的鍵值,那么就會返回最應該插入的位置,這時第一個迭代器和第二個迭代器是相等的。
如果是用map,那么鍵唯一,也就是將上述代碼中的multimap被替換為map,這時下面代碼所得到的結果就是'a'鍵對應的值10。

#include <iostream>
#include <map>
int main ()
{
  std::map<char,int> my_map;
  my_map.insert(std::make_pair('a',10));
  my_map.insert(std::make_pair('a',20));
  my_map.insert(std::make_pair('a',30));
  my_map.insert(std::make_pair('a',40));
  my_map.insert(std::make_pair('b',10));
  my_map.insert(std::make_pair('c',10));
  my_map.insert(std::make_pair('c',20));
  std::cout << my_map.size() << std::endl;
  std::pair<std::map<char,int>::iterator,std::map<char,int>::iterator> ret;
  ret=my_map.equal_range('a');
  for(std::map<char,int>::iterator it=ret.first;it !=ret.second;it++){
        std::cout << it->first << " => " << it->second << '\n';
  }
  return 0;
}

輸出:

3
a => 10

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM