Compiler-Abstürze mit std::sort verstehen
Die C-Standardbibliotheksfunktion std::sort spielt eine entscheidende Rolle beim Sortieren von Daten Strukturen. Allerdings verhalten sich nicht alle Vergleichsfunktionen wie erwartet mit std::sort, was möglicherweise zu Programmabstürzen führt.
Beachten Sie den folgenden Codeausschnitt:
#include <algorithm> struct A { int a; }; bool compare(const A& a, const A& b) { return a.a <= b.a; // Corrected from original code (<) } int main() { A coll[8]; std::sort(&coll[0], &coll[8]); }
Problem:
Im Originalcode verwendet die Vergleichsfunktion „compare“ a.a <= b.a, um Elemente zu vergleichen, wodurch gleiche Elemente berücksichtigt werden können sortiert. Dies verstößt gegen die von std::sort geforderte strenge schwache Ordnungsregel.
Lösung:
Gemäß der strengen schwachen Ordnungsregel für alle Elemente A, B und C in einer Sequenz müssen die folgenden Bedingungen gelten:
Die ursprüngliche Vergleichsfunktion „compare“ erfüllt diese Regel nicht, da sie zulässt, dass A gleich ist selbst, was zu potenziellen Endlosschleifen innerhalb von std::sort führt. Um dies zu beheben, muss die Vergleichsfunktion durch die im obigen Codeausschnitt gezeigte korrigierte Version ersetzt werden.
Das obige ist der detaillierte Inhalt vonWarum stürzt mein „std::sort' ab? (Und wie man es behebt). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!