我使用以下比较器函数来对我的矢量对进行排序。
bool sortbysec(const pair<long long,long long> &a,
const pair<long long,long long> &b)
{
if(a.second < b.second)
{
return true;
}
else if(a.second==b.second)
{
if(a.first<b.first)
{
return true;
}
}
return false;
}
现在我想在upper_bound
上使用给定值进行pair.second
。如何编写它的比较器功能,这样我可以得到second = second element
的第一对,并且首先是最低的?
感谢。
答案 0 :(得分:0)
您需要std::lower_bound
,而不是upper_bound
。像这样:
auto iter = std::lower_bound(
your_contaner.begin(),
your_contaner.end(),
lookup_second,
[](const std::pair<long long,long long>& p, long long second) {
return p.second < second;
}
);
if (iter != your_contaner.end() && iter->second == lookup_second) {
// `iter` points to an element with given `second` and smallest `first`.
// Otherwise, there's no element with given `second`, and `iter` points
// to the leftmost larger element, or `end()`.
}