Heim > Backend-Entwicklung > C++ > Warum stürzt mein „std::sort' ab? (Und wie man es behebt)

Warum stürzt mein „std::sort' ab? (Und wie man es behebt)

Susan Sarandon
Freigeben: 2024-12-14 16:22:14
Original
761 Leute haben es durchsucht

Why Does My `std::sort` Crash?  (And How to Fix It)

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]);
}
Nach dem Login kopieren

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:

  • Wenn A < B, dann B > A.
  • Wenn A < B und B < C, dann A < C.
  • A kann nicht gleich sich selbst sein (d. h. A != A).
  • 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!

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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage