Warum stürzt std::sort ab, wenn die Vergleichsfunktion kein strenger Operator „<“ ist?
Das bereitgestellte C-Code-Snippet zeigt ein Absturz bei der Verwendung von std::sort aufgrund einer falschen Vergleichsfunktion. Da std::sort einen Sortierer erwartet, der die strenge Regel für schwache Ordnung erfüllt, wollen wir uns mit dem Problem und seiner Lösung befassen.
Im Code prüft die Vergleichsfunktion für die A-Struktur, ob a kleiner oder gleich ist zu (<=) other.a. Dies verstößt jedoch gegen die strenge Regel der schwachen Ordnung.
Strikte schwache Ordnung
Eine strikte schwache Ordnung definiert eine Beziehung, die wie folgt lautet:
Im Code erfüllt die Vergleichsfunktion die Antisymmetrieeigenschaft nicht, da sie „true“ zurückgibt, selbst wenn a gleich other.a ist. Dies kann zu nicht deterministischem Verhalten in std::sort führen, beispielsweise einer Endlosschleife.
Lösung
Um das Problem zu beheben, sollte die Vergleichsfunktion geändert werden um die strikte schwache Ordnungsregel einzuhalten, indem nur dann „true“ zurückgegeben wird, wenn a strikt kleiner als other.a ist, wie unten gezeigt:
struct A { bool operator <(const A& other) const { return a < other.a; // Return true only when a is strictly less than other.a } };
Diese korrigierte Vergleichsfunktion gewährleistet dass die strikte schwache Ordnungsregel eingehalten wird, sodass std::sort wie erwartet ohne Abstürze funktioniert.
Das obige ist der detaillierte Inhalt vonWarum stürzt „std::sort' ab, wenn die Vergleichsfunktion nicht streng ist?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!