gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-27 23:05:46 25 4
gpt4 key购买 nike

我试图从排序的对 vector 中找出大于给定 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表示我要从 vector v第ith位置开始搜索到结束。但是,它给了我一个错误:

error: no matching function for call to 'upper_bound(__gnu_cxx::__alloc_traits<std::
allocator<std::pair<int, int> > >::
value_type&, std::vector<std::pair<int, int> >::iterator, int&,
bool (&)(int, const std::pair<int, int>&))'

是什么原因造成这样的错误?有没有更好的方法从给定的位置搜索?

最佳答案

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);

关于c++ - 来自特定位置的 upper_bound 函数而不是 data.begin(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23659047/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com