如何将upper_bound与成对向量一起使用,按pair.second的递增顺序排列,然后pair.first?

Posted

技术标签:

【中文标题】如何将upper_bound与成对向量一起使用,按pair.second的递增顺序排列,然后pair.first?【英文标题】:How to use upper_bound with a vector of pairs, arranged in increasing order of pair.second, and then pair.first? 【发布时间】:2016-09-18 19:18:14 【问题描述】:

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

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;

现在我想用给定的值对pair.second 执行upper_bound。我如何编写它的比较器函数,以便我可以获得second = second element 的第一对,并且第一对应该是最低的?

谢谢。

【问题讨论】:

使用仿函数类而不是普通函数。这个类也可以包含对完整向量的引用。 你也可以使用普通函数。我不明白这个问题。 【参考方案1】:

你想要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()`.

【讨论】:

以上是关于如何将upper_bound与成对向量一起使用,按pair.second的递增顺序排列,然后pair.first?的主要内容,如果未能解决你的问题,请参考以下文章

在 ARM Cortex A8 上的汇编中 XOR NEON 向量/寄存器的所有元素/通道(成对?)

lower 和 upper_bound 在结构的排序向量上

jdk8源码Arrays.sort插入排序,居然还可以成对插入

jdk8源码Arrays.sort插入排序,居然还可以成对插入

用成对向量提升几何区域?

vector 牛逼 +lower_bound+ upper_bound