zoukankan      html  css  js  c++  java
  • cb34a_c++_STL_算法_查找算法_(7)_lower_bound

    cb34a_c++_STL_算法_查找算法_(7)_lower_bound
    //针对已序区间的查找算法,如set,multiset关联容器-自动排序
    lower_bound()--第一个可能的位置
    upper_bound()--查找最后一个可能的位置
    equal_range()--同时查找第一个和最后一个可能的位置.做了两件事,先做lower_bound(),再upper_bound()

    pair<list<int>::iterator, list<int>::iterator> range;//pair(一对迭代器)
    range = equal_range(ilist.begin(), ilist.end(), 5);
    cout << distance(ilist.begin(),range.first) << endl;
    cout << distance(ilist.begin(),range.second) << endl;


    关联式容器有等效的成员函数。性能更佳
    multiset<int>::iterator iter1a,iter2a,iter3a;
    iter1a=iset.lower_bound(5);
    cout << "5的索引位置1a:" << distance(iset.begin(), iter1a) << endl;
    iter2a=iset.upper_bound(5);
    cout << "最后一个5的下一个索引位置2a:" << distance(iset.begin(), iter2a) << endl;

    pair<multiset<int>::iterator, multiset<int>::iterator> range2;
    range2 = iset.equal_range(5);
    cout << "lower索引:"<<distance(iset.begin(),range2.first) << endl;
    cout << "upper索引:"<<distance(iset.begin(),range2.second) << endl;

    distance(ilist.begin(), pos2) + 1, 用于计算数据的位置。pos2是迭代器,*pos2可以输入所指向的值
    ilist.sort();//排序

      1 /*cb34a_c++_STL_算法_查找算法_(7)_lower_bound
      2 //针对已序区间的查找算法,如set,multiset关联容器-自动排序
      3 lower_bound()--第一个可能的位置
      4 upper_bound()--查找最后一个可能的位置
      5 equal_range()--同时查找第一个和最后一个可能的位置.做了两件事,先做lower_bound(),再upper_bound()
      6 
      7 pair<list<int>::iterator, list<int>::iterator> range;//pair(一对迭代器)
      8     range = equal_range(ilist.begin(), ilist.end(), 5);
      9     cout << distance(ilist.begin(),range.first) << endl;
     10     cout << distance(ilist.begin(),range.second) << endl;
     11 
     12 
     13 关联式容器有等效的成员函数。性能更佳
     14 multiset<int>::iterator iter1a,iter2a,iter3a;
     15     iter1a=iset.lower_bound(5);
     16     cout << "5的索引位置1a:" << distance(iset.begin(), iter1a) << endl;
     17     iter2a=iset.upper_bound(5);
     18     cout << "最后一个5的下一个索引位置2a:" << distance(iset.begin(), iter2a) << endl;
     19 
     20     pair<multiset<int>::iterator, multiset<int>::iterator> range2;
     21     range2 = iset.equal_range(5);
     22     cout << "lower索引:"<<distance(iset.begin(),range2.first) << endl;
     23     cout << "upper索引:"<<distance(iset.begin(),range2.second) << endl;
     24 
     25 distance(ilist.begin(), pos2) + 1, 用于计算数据的位置。pos2是迭代器,*pos2可以输入所指向的值
     26 ilist.sort();//排序
     27 */
     28 
     29 #include <iostream>
     30 #include <algorithm>
     31 #include <list>
     32 #include <set>
     33 
     34 using namespace std;
     35 
     36 int main()
     37 {
     38     list<int> ilist;
     39     for (int i = 1; i <= 9; ++i)
     40         ilist.insert(ilist.end(), i);
     41     for (int i = 1; i <= 9; ++i)
     42         ilist.insert(ilist.end(), i);
     43     ilist.push_back(5);
     44     ilist.push_back(5);
     45     ilist.push_back(5);
     46     ilist.sort();
     47 
     48     for (list<int>::iterator iter = ilist.begin(); iter != ilist.end(); ++iter)
     49         cout << *iter << ' ';
     50     cout << endl;
     51     list<int>::iterator pos1,pos2;
     52     pos1 = lower_bound(ilist.begin(), ilist.end(), 5);
     53     cout << "第一个5的位置: " << distance(ilist.begin(), pos1) + 1 << endl;
     54 
     55     pos2 = upper_bound(ilist.begin(), ilist.end(), 5);//大于5的下一个位置。upper:大于。
     56     cout << "找到最后一个5的下一个位置:" << distance(ilist.begin(), pos2) + 1 << endl;//加1就是从1开始数,第几个位置。用索引表示就0开始咯
     57     cout <<"指向的值是:"<< *pos2 << endl;
     58 
     59     cout << "插入数据" << endl;
     60 
     61     ilist.insert(pos1, 3);//迭代器pos1前面插入3
     62     for (list<int>::iterator iter = ilist.begin(); iter != ilist.end(); ++iter)
     63         cout << *iter << ' ';
     64     cout << endl;
     65 
     66     ilist.insert(pos2, 8);//迭代器pos2前面插入8
     67     
     68     for (list<int>::iterator iter = ilist.begin(); iter != ilist.end(); ++iter)
     69         cout << *iter << ' ';
     70     cout << endl;
     71     ilist.sort();
     72     for (list<int>::iterator iter = ilist.begin(); iter != ilist.end(); ++iter)
     73         cout << *iter << ' ';
     74     cout << endl;
     75 
     76     pair<list<int>::iterator, list<int>::iterator> range;
     77     range = equal_range(ilist.begin(), ilist.end(), 5);
     78     cout << distance(ilist.begin(),range.first) << endl;
     79     cout << distance(ilist.begin(),range.second) << endl;
     80 
     81 
     82     cout << "关联式容器有等效的成员函数。性能更佳,示范如下:" << endl;
     83     multiset<int> iset;
     84 
     85     for (int jj = 1; jj <= 8; ++jj)
     86         iset.insert(jj);
     87     for (int jj = 1; jj <= 8; ++jj)
     88         iset.insert(jj);
     89     for (multiset<int>::iterator iter = iset.begin(); iter != iset.end(); ++iter)
     90         cout << *iter << ' ';
     91     cout << endl;
     92     multiset<int>::iterator iter1a,iter2a,iter3a;
     93     iter1a=iset.lower_bound(5);
     94     cout << "5的索引位置1a:" << distance(iset.begin(), iter1a) << endl;
     95     iter2a=iset.upper_bound(5);
     96     cout << "最后一个5的下一个索引位置2a:" << distance(iset.begin(), iter2a) << endl;
     97     
     98     pair<multiset<int>::iterator, multiset<int>::iterator> range2;
     99     range2 = iset.equal_range(5);
    100     cout << "lower索引:"<<distance(iset.begin(),range2.first) << endl;
    101     cout << "upper索引:"<<distance(iset.begin(),range2.second) << endl;
    102 
    103     return 0;
    104 }
    欢迎讨论,相互学习。 txwtech@163.com
  • 相关阅读:
    虚拟研讨会:如何设计好的RESTful API(转)
    六百字读懂 Git(转)
    情侣相处最佳模式(转)
    UML初览(转)
    日志分析方法概述(转)
    病入膏肓的叮咚小区还有救吗?(转)
    基于Django的Disqus如何支持每月80亿PV(转)
    高质量代码三要素:可读性、可维护性、可变更性(转)
    如何提高代码质量(转)
    管理神话之一:得不偿失的100%利用(转)
  • 原文地址:https://www.cnblogs.com/txwtech/p/12337784.html
Copyright © 2011-2022 走看看