我试图从排序的对向量中找出大于给定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
造成这种错误的原因是什么?是否有更好的方法可以从给定的位置进行搜索?
答案 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);