18

在这个Tech-Talk about D的时间 0:43:15,讨论了 min 函数的实现。提出在某些算法中使用时对“稳定性”和“额外改组(如果值相等)”的担忧是所示实现的原因之一。

任何人都可以提供一个真实/实际的用例(或提供更详细的解释),其中 min 的这个特定实现是“稳定的”(又名更好)而不是其他可能的实现?或者这只是 alpha-geeks 走得太远的另一个例子?

推荐实施:

template <class LHS, class RHS, class Return>
inline Return min(LHS& lhs, RHS& rhs)
{
   return (rhs < lhs) ? rhs : lhs;
}

其他可能的实现:

template <class LHS, class RHS, class Return>
inline Return min(LHS& lhs, RHS& rhs)
{
   return (lhs < rhs) ? lhs: rhs;
}

提案N2199提供了基于后者的实现,请注意此时该提案并未成功。

其他与最小值/最大值相关的建议是N1840N2485N2551

4

2 回答 2

38

在这种情况下,我很确定“稳定”指的是稳定,因为它应用于排序 - 即,当/如果两个元素相等时,它们会按照与开始时相同的顺序进行排序。为了实现这一点,您希望lhs在它小于或等于时返回rhs- 但在 C++ 中,您(通常)希望仅使用 来执行此操作operator<,而不依赖于拥有operator<=.

于 2010-11-13T20:26:36.013 回答
-4

在一般情况下,一种实现方式相对于另一种实现方式没有优势。如果您正在min为特定用途实施,则根据将要应用的数据选择一种形式以充分利用分支预测可能是有意义的。

如果对于大多数用例,预期的最小值是rhs,请选择第一个实现。如果是lhs,请选择第二个实现。

于 2013-03-23T20:49:32.980 回答