来自特定位置的upper_bound函数而不是data.begin()

时间:2014-05-14 15:30:40

标签: c++ search c++11 stl

我试图从排序的对向量中找出大于给定Number的第一个数字。我使用了upper_bound,效果很好。代码如下所示:

bool cmp(int n, pair<int, int> const& p)
{    
    return (p.first > n) ;
}

vector<pair<int,int>> v;
vector<pair<int,int>>::iterator up;
//int Number = ...;
// .......
up = upper_bound(v.begin(), v.end(), Number, cmp);

现在我想从特定位置而不是从头开始搜索。所以我将代码更改为:

up = upper_bound(v.at(i), v.end(), Number, cmp);

其中i表示我想从向量ith的{​​{1}}位置搜索结束。但是,它给了我一个错误:

v

造成这种错误的原因是什么?是否有更好的方法可以从给定的位置进行搜索?

1 个答案:

答案 0 :(得分:4)

std::vector::at不返回迭代器,这是upper_bound所需的。您可以获得所需位置的迭代器并将其传递给它:

up = upper_bound(v.begin() + i, v.end(), Number, cmp);

up = upper_bound(std::next(v.begin(), i), v.end(), Number, cmp);