1. ホーム
  2. c++

[解決済み] max templateの実装に「a < b ? b : a」ではなく「b < a ? a : b」を使用するのはなぜですか?

2022-04-26 08:48:26

質問

C++テンプレート -完全ガイド 第2版 が紹介されています。 マックス テンプレートがあります。

template<typename T>
T max (T a, T b)
{
  // if b < a then yield a else yield b
  return  b < a ? a : b;
}

を使うことが説明されています。 “b < a ? a : b” の代わりに “a < b ? b : a” :

StepanovNotes]によるmax()テンプレートに注意してください。 a < b ? b : a "の代わりに "b < a ? a : b "を意図的に返すようにしています。 この関数は、2つの値が同じであっても正しく動作します。 は等しいが、等しくない。

"をどう理解するか。 even if the two values are equivalent but not equal. とは? “a < b ? b : a” は、私の場合、同じ結果になるようです。

解決方法は?

std::max(a, b) を返すように指定されているのは確かです。 a が等価であるとき。

では間違いとされています。 ステパノフ という便利な特性を壊してしまうからです。 ab を使えば、いつでも並べ替えが可能です。 {min(a, b), max(a, b)} そのためには max(a, b) を返すように b は、引数が等価である場合に