2017-01-05 13 views
2

std :: sortの比較関数が常にtrueを返すと、ランタイムエラーが発生するのはなぜですか?std :: sortの比較関数が常にtrueを返すと、ランタイムエラーが発生するのはなぜですか?

​​
+3

比較演算子が確定的でないため、私の推測は無限再帰です。 – NathanOliver

+0

@ NathanOliver演算子は最も確かに[決定論的]です(https://en.wikipedia.org/wiki/Deterministic_algorithm)。 – user2079303

+0

@ user2079303壊れた、間違っているという言葉は何ですか? – NathanOliver

答えて

13

比較関数は、Compareという概念の要件を満たしている必要があります。要件の1つは次のとおりです。

カンプ場合は(a、b)は== trueの場合、COMP(B、A)== falseを

あなたの関数は、この要件に違反するので、プログラムは未定義の動作をしています。

+0

Visual Studioの場合、デバッグビルドはこのチェックを行い(実行時エラーを強制する)、リリースビルドがこのチェックを行うかどうかはわかりません。 – rcgldr

0

あなたは、その後、ランダムでアイテムを取って「大きな」および「小さな」の山の中にすべての入力を分離することにより、qsortを書きます。それからあなたは両方の杭に同じことをします。これは、各ステップで各山を多かれ少なかれ半分にした場合にのみ機能します。比較関数が常にtrueを返すと、すべてが「大きな」パイルになり、スタックが使い果たされコンピュータがエラーを報告するまで再帰は決して停止しません。おそらく何が起こっているのです

関連する問題