zoukankan      html  css  js  c++  java
  • equal_range用法

    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,其第一和第二(都是迭代器)皆指向该位置。
    1. // map::equal_elements
    2. #include <iostream>
    3. #include <map>
    4. using namespace std;

    5. int main ()
    6. {
    7.   map<char,int> mymap;
    8.   pair<map<char,int>::iterator,map<char,int>::iterator> ret;

    9.   mymap['a']=10;
    10.   mymap['b']=20;
    11.   mymap['c']=30;

    12.   ret = mymap.equal_range('b');

    13.   cout << "lower bound points to: ";
    14.   cout << ret.first->first << " => " << ret.first->second << endl;

    15.   cout << "upper bound points to: ";
    16.   cout << ret.second->first << " => " << ret.second->second << endl;

    17.   return 0;
    18. }
    运行结果:
    1. lower bound points to: 'b' => 20
    2. upper bound points to: 'c' => 30

  • 相关阅读:
    docer run 、docker attach 与 docker exec的区别
    filebeat-kafka:WARN producer/broker/0 maximum request accumulated, waiting for space
    json 格式要求
    词法分析
    CSS3 鲜为人知的属性-webkit-tap-highlight-color的理解
    DOMContentLoaded与load的区别
    用vue的自定义组件写了一个拖拽 组件,局部的 只能在自定义元素内的
    浮动元素遇到标准流元素 会发生转角遇到爱
    柯里化函数
    转载一篇关于toString和valueOf
  • 原文地址:https://www.cnblogs.com/lidabo/p/3340249.html
Copyright © 2011-2022 走看看