在CppCon 2014 的" 烧烤委员会 "会议上,委员会成员Walter Brown提到std :: max在两个参数具有相等值的情况下返回错误的值.
这是被接受的,没有评论,也没有详细说明.这是什么意思?为什么要返回哪个值很重要?
jch*_*jch 35
如果min且max仅用于有序集合,则所有合理的定义都是等效的.
然而在实践中,min并max套在其中,你可以有一个排序相同,而不是相同的两个要素:是在点餐台使用.例如,您可能正在操纵:
struct student {
char *name;
int grade;
};
Run Code Online (Sandbox Code Playgroud)
并定义s1 < s2何时strcmp(s1->name, s2->name) < 0.然后,两名同名但成绩不同的学生将进行相同的排序.据说这两个元素对于(预)排序关系是等价的.
在预先设定的集合中,参数是min两个等效元素应该返回第一个参数,并且max应该返回第二个参数.这个定义保留了一些您期望的属性,最值得注意的是
min(x,y),max(x,y))是(x,y)或(y,x),和
x并且y是不同的,那么min(x,y)并且max(x,y)是不同的,和
x,y)到(min(x,y),max(x,y))的函数是两个元素集的稳定排序函数.这不是一个新想法,你会在编程的许多标准文本中找到比我更好的解释.如果您喜欢C++语法,Mat和juanchopanza已经引用的Stepanov论文的第7章是一个很好的资源.