如何使用带有对的向量的upper_bound,按pair.second的递增顺序排列,然后pair.first?

时间:2016-09-18 19:18:15

标签: c++ stl

我使用以下比较器函数来对我的矢量对进行排序。

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的第一对,并且首先是最低的?

感谢。

1 个答案:

答案 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()`.
}