Heim > Backend-Entwicklung > C++ > Warum stürzt „std::sort' ab, wenn eine Vergleichsfunktion mit nicht strikter schwacher Reihenfolge verwendet wird?

Warum stürzt „std::sort' ab, wenn eine Vergleichsfunktion mit nicht strikter schwacher Reihenfolge verwendet wird?

DDD
Freigeben: 2024-12-18 13:57:11
Original
905 Leute haben es durchsucht

Why Does `std::sort` Crash When Using a Non-Strict Weak Ordering Comparison Function?

Warum stürzt std::sort bei einem Nicht-Operator< ab? Vergleichsfunktion?

In C erfordert std::sort eine Vergleichsfunktion, die der Regel strikte schwache Reihenfolge entspricht. Diese Regel stellt sicher, dass die Vergleichsfunktion genau dann „true“ zurückgibt, wenn der linke Operand kleiner als der rechte Operand ist.

Beachten Sie den bereitgestellten Code:

#include 

struct A {
  A() : a() {}

  bool operator<(const A& other) const {
    return a <= other.a;
  }

  int a;
};

int main() {
  A coll[8];
  std::sort(&coll[0], &coll[8]); // Crash!!!
}

Die benutzerdefinierte Vergleichsfunktion gibt einen <. zurück ;= other.a für Gleichheitsfälle. Dies verstößt gegen die strenge Regel der schwachen Ordnung, da sie besagt, dass zwei Elemente genau dann als gleich gelten, wenn a == other.a.

Durch die Änderung des Vergleichs in a < other.a, die Regel ist erfüllt, da sie nur dann true zurückgibt, wenn a strikt kleiner als other.a ist. Die Verwendung einer strikten Reihenfolge verhindert, dass der Algorithmus in eine Endlosschleife gerät, wenn er auf gleiche Elemente trifft.

Zusammenfassend lässt sich sagen, dass std::sort bei einem Nicht-Operator< abstürzt. Vergleichsfunktion, da die Funktion gegen die strenge Regel der schwachen Ordnung verstößt, was möglicherweise zu Endlosschleifen führt. Daher ist es wichtig, sicherzustellen, dass Ihre Vergleichsfunktion diese Regel einhält, um unerwartetes Verhalten zu vermeiden.

Das obige ist der detaillierte Inhalt vonWarum stürzt „std::sort' ab, wenn eine Vergleichsfunktion mit nicht strikter schwacher Reihenfolge verwendet wird?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage