程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> equal_range用法

equal_range用法

編輯:C++入門知識

equal_range是C++ STL中的一種二分查找的算法,試圖在已排序的[first,last)中尋找value,它返回一對迭代器i和j,其中i是在不破壞次序的前提下,value可插入的第一個位置(亦即lower_bound),j則是在不破壞次序的前提下,value可插入的最後一個位置(亦即upper_bound),因此,[i,j)內的每個元素都等同於value,而且[i,j)是[first,last)之中符合此一性質的最大子區間      如果以稍許不同的角度來思考equal_range,我們可把它想成是[first,last)內"與value等同"之所有元素形成的區間A,由於[fist,last)有序(sorted),所以我們知道"與value等同"之所有元素一定都相鄰,於是,算法lower_bound返回區間A的第一個迭代器,算法upper_bound返回區間A的最後一個元素的下一個位置,算法equal_range則是以pair的形式將兩者都返回    即使[fist,last)並未含有"與value等同"之任何元素,以上敘述仍然合理,這種情況下,"與value等同"之所有元素形成的,其實是一個空區間,在不破壞次序的情況下,只有一個位置可以插入value,而equal_range所返回的pair,其第一和第二(都是迭代器)皆指向該位置。 // map::equal_elements   #include <iostream>   #include <map>   using namespace std;       int main ()   {     map<char,int> mymap;     pair<map<char,int>::iterator,map<char,int>::iterator> ret;         mymap['a']=10;     mymap['b']=20;     mymap['c']=30;         ret = mymap.equal_range('b');         cout << "lower bound points to: ";     cout << ret.first->first << " => " << ret.first->second << endl;         cout << "upper bound points to: ";     cout << ret.second->first << " => " << ret.second->second << endl;         return 0;   } 運行結果: lower bound points to: 'b' => 20   upper bound points to: 'c' => 30  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved