gpt4 book ai didi

c++ - 在一元函数上使用 STL 算法

转载 作者:行者123 更新时间:2023-12-04 08:22:26 31 4
gpt4 key购买 nike

所以我经常想对一系列元素执行一些 STL 算法,而不是比较函数,我想传递一个一元函数 f。
例如我想写这样的东西

std::max_element(begin(range), end(range), f);
在应用 f 后找到范围内的最大元素。
我目前的解决方法看起来像这样:
std::max_element(begin(range), end(range, [&f](auto a, auto b){ return f(a) < f(b); });
乍一看,这似乎没有问题。但是 f 可能是一个 lambda 表达式本身,也可能是比 f 更复杂的另一种方式。
我对那段代码有两个问题:
a) 它很容易出错,因为人们可能会不小心写出 f(a) < f(a)(特别是如果更复杂并且使用了复制和过去)。这是代码重复的问题
b) 它没有很好地表达意图。如果我想按函数排序,我不想处理比较。
不幸的是,我在标准库(甚至boost)中都没有找到解决这类问题的好方法,所以想请教一下你对这个问题的解决方案是什么。算法中不存在这种重载是否有任何理由?

最佳答案

使用 c++ 20 的范围,您可以执行以下操作:

std::ranges::max_element(range | std::views::transform(f));

关于c++ - 在一元函数上使用 STL 算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65436780/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com