如何将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 向量/寄存器的所有元素/通道(成对?)
jdk8源码Arrays.sort插入排序,居然还可以成对插入