码迷,mamicode.com
首页 > 其他好文 > 详细

关于序列中某个元素位置的查找

时间:2015-06-11 14:35:01      阅读:105      评论:0      收藏:0      [点我收藏+]

标签:

ForwardIter lower_bound(ForwardIter first, ForwardIter last,const _Tp& val)算法返回一个非递减序列[first, last)中的第一个大于等于值val的位置。

ForwardIter upper_bound(ForwardIter first, ForwardIter last, const _Tp& val)算法返回一个非递减序列[first, last)中第一个大于val的位置。

lower_bound和upper_bound如下图所示:

 

技术分享

 

调用时注意,传入的firest 是第一元素的索引,传入的last是最后一个元素下一个元素的索引。

返回时,若所有元素都比targe 小,则返回last

STL 的equal_range是基于lower_bound 和upper_bound实现的

 

#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

int main(int argc, char** argv)
{

    int arr[] = {3,2,5,4,8,0,9,5,6};

    sort(arr,arr+9);

    cout << lower_bound(arr,arr+9,5)-arr << endl;
    cout << upper_bound(arr,arr+9,5)-arr << endl;

    vector<int> vec;
    vec.push_back(3);
    vec.push_back(2);
    vec.push_back(5);
    vec.push_back(4);
    vec.push_back(8);
    vec.push_back(0);
    vec.push_back(9);
    vec.push_back(5);
    vec.push_back(6);

    sort(vec.begin(), vec.end());

    cout << lower_bound(vec.begin(),vec.end(),5)-vec.begin() << endl;
    cout << upper_bound(vec.begin(),vec.end(),5)-vec.begin() << endl;

    return 0;
}

输出:

4
6
4
6

 

关于序列中某个元素位置的查找

标签:

原文地址:http://www.cnblogs.com/scarecrow-blog/p/4568948.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!