比给定值最小的最大元素的 STL 算法
Posted
技术标签:
【中文标题】比给定值最小的最大元素的 STL 算法【英文标题】:STL algorithm for smallest max element than a given value 【发布时间】:2016-10-08 23:08:19 【问题描述】:最近我遇到了这个代码片段:
// 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;
我想知道是否有人能想到一个优雅的 stl 算法来代替上述算法。本质上,我们必须遍历所有元素,并跟踪我们需要的元素。这与std::max_element
不同(至少我不能那样建模)。
【问题讨论】:
什么是“最小最大元素”? 啊。我应该说最小的最大元素。auto filtered=nums|filtered([&](int v)return v<*given;); auto the_one=std::max_element(filtered.begin(),filtered.end());
【参考方案1】:
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;
);
诀窍是编写一个比较函数,声明任何“好”元素(大于*given
的元素)来比较小于任何“不好”元素。正常比较两个“好”元素;两个“坏”元素总是被声明为等价的。
【讨论】:
以上是关于比给定值最小的最大元素的 STL 算法的主要内容,如果未能解决你的问题,请参考以下文章
使用 STL 算法在表(向量的向量、二维数组)中查找最小值/最大值的优雅方法