C++ 小于给定值的最小最大元素的STL算法

C++ 小于给定值的最小最大元素的STL算法,c++,algorithm,stl,C++,Algorithm,Stl,最近我遇到了以下代码片段: // look for element which is the smallest max element from // a given iterator int diff = std::numeric_limits<int>::max(); auto it = nums.rbegin(); auto the_one = nums.rbegin(); for (; it != given; ++it) // this terminates { in

最近我遇到了以下代码片段:

// look for element which is the smallest max element from
// a given iterator
int diff = std::numeric_limits<int>::max();
auto it = nums.rbegin();
auto the_one = nums.rbegin();

for (; it != given; ++it) // this terminates
{
  int local_diff = *it - *given;
  // if the element is less than/equal to given we are not interested
  if (local_diff <= 0)
     continue;

  if (local_diff < diff)
  {
     // this update the global diff
     diff = local_diff;
     the_one = it;
  }
}
//查找元素中最小的max元素
//给定迭代器
int diff=std::numeric_limits::max();
auto it=nums.rbegin();
auto the_one=nums.rbegin();
for(;it!=given;++it)//终止
{
int local_diff=*it-*给定;
//如果元素小于/等于给定值,则我们不感兴趣
如果(local_diff
auto)自动调用\u one=std::min_元素(nums.rbegin(),给定,
[给定](内部a、内部b){
bool good_a=a>*给定;
bool good_b=b>*给定;
返回(good_a和good_b)?a

诀窍是编写一个比较函数,声明任何“好”元素(大于给定的
*的元素)来比较比任何“不好”元素小的元素。两个“好”元素通常进行比较;两个“坏”元素总是声明为等价的。

waht是“最小的最大元素”我应该说最小的最大元素。
auto filtered=nums | filtered([&](int v){return v
auto the_one = std::min_element(nums.rbegin(), given,
  [given](int a, int b) {
    bool good_a = a > *given;
    bool good_b = b > *given;
    return (good_a && good_b) ? a < b : good_a;
  });