gpt4 book ai didi

c++ - 为什么 std::max 返回错误的值?

转载 作者:IT老高 更新时间:2023-10-28 12:37:35 30 4
gpt4 key购买 nike

在 CppCon 2014 的“Grill the Committee” session 上,委员会成员 Walter Brown 提到,如果两个参数的值相等,std::max 会返回错误的值。

这被接受,没有评论,也没有详细说明。他这是什么意思?为什么返回哪个值很重要?

最佳答案

如果 minmax只用在有序集合上,所有合理的定义都是等价的。

然而,在实践中,minmax用于预排序集:在其中您可以有两个排序相同但不完全相同的元素的集合。例如,您可能正在操纵:

struct student {
char *name;
int grade;
};

并定义s1 < s2strcmp(s1->name, s2->name) < 0 .然后两个名字相同但成绩不同的学生将排序相同。对于(预)排序关系,这两个元素被称为等价

在预排序集上,参数为 min两个等价的元素应该返回第一个参数,max应该返回第二个。此定义保留了一些您所期望的属性,最值得注意的是

  • 这对(min(x,y)max(x,y))是(xy)或(yx),

  • 如果 xy是不同的,那么 min(x,y)max(x,y)是不同的,

  • 将 ( x , y ) 映射到 ( min(x,y) , max(x,y) ) 的函数对于两个元素的集合是一个稳定的排序函数。

这不是一个新想法,您会在许多有关编程的标准文本中找到比我更好的解释。第7章Stepanov Papers ,已经被 Mat 和 juanchopanza 引用过,如果你喜欢 C++ 语法,它是一个很好的来源。

关于c++ - 为什么 std::max 返回错误的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26584510/

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