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

任何人都可以提供一个实际的/实际的用例(或提供更详细的解释),其中min的这种特定实现与其他可能的实现相比是“稳定的”(又名更好)?还是这只是阿尔法怪胎走得太远的另一个例子?

推荐的实现方式:

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

最佳答案

在这种情况下,我非常确定“稳定”是指稳定的,因为它在排序中使用-也就是说,当/如果两个元素相等,它们将保持与开始时相同的顺序进行排序。为此,您想在lhs小于或等于rhs时返回operator<,但在C++中,您(通常)只想使用operator<=来做到这一点,而不必依赖于ojit_code。

关于c++ - 正确执行min,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4174447/

10-11 22:49
查看更多