2014-05-14 50 views
0

我想從已排序的對向量中找出比給定的第一個數字大012db。我用upper_bound,它運作良好。代碼如下所示:upper_bound函數從一個特定的位置,而不是data.begin()

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意味着,我想從矢量vith位置結束搜索。然而,它給我一個錯誤:

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>&))' 

是什麼原因造成這樣的錯誤?有沒有更好的方法從一個給定的位置搜索?

回答

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); 
相關問題