Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 来自特定位置的上限函数,而不是数据。begin()_C++_Search_C++11_Stl - Fatal编程技术网

C++ 来自特定位置的上限函数,而不是数据。begin()

C++ 来自特定位置的上限函数,而不是数据。begin(),c++,search,c++11,stl,C++,Search,C++11,Stl,我试图从排序对向量中找出大于给定数的第一个数。我使用了上限,效果很好。代码如下所示: 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 = ...; // ....... u

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

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);
其中,
i
表示我要从向量
v
第i个
位置搜索到末尾。但是,它给了我一个错误:

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>&))'
错误:对“上限(\uu gnu\u cxx::\uu alloc\u traits:”的调用没有匹配的函数:
值类型&,标准::向量::迭代器,整数&,
bool(&)(int,const std::pair&)'

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

std::vector::at
不返回迭代器,这是上界所需的迭代器。您可以将迭代器获取到所需位置,并按如下方式传递它:

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


std::vector::at
不返回迭代器,这是
上限所需的迭代器。您可以将迭代器获取到所需位置,并按如下方式传递它:

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

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