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 }

 

posted @ 2020-02-20 22:18  txwtech  阅读(139)  评论(0编辑  收藏  举报