【发布时间】:2017-07-29 19:15:00
【问题描述】:
在 C++max_element 中,如果有多个元素为最大值,则返回第一个这样的元素。而minmax_element(C++11 以上)返回最后一个最大元素。
这种行为的标准是否有原因?
来自 cplusplus.com
如果多个等效元素具有最大值,则第二个迭代器指向此类元素中的最后一个。
第一个版本使用 operator
【问题讨论】:
-
According to CPPReference this is the expected behaviour. 为什么这是意料之中的事,我必须去参加标准比赛。
-
[alg.min.max](rev n4594 中的注释 30)规定这是法律。没有理性列出。
-
更有趣的是
minmax_element对最小元素应用了相反的策略(返回第一个)。 -
Boost 库文档boost.org/doc/libs/1_57_0/libs/algorithm/minmax/#rationale 包含一些基本原理讨论。
-
@Barmar 这是一个很好的链接。它在一定程度上解释了该决定的理由。我现在必须通过 CLRS 第 9.1 节来完全理解算法的背景,该算法实现了最小最大元素搜索的 3n/2 解决方案。如果您将其添加为答案,我会接受。如果您可以添加算法的详细信息会更好,但这对我来说并不重要。