Comprendre les crashs du compilateur avec std::sort
La fonction de la bibliothèque standard C, std::sort, joue un rôle crucial dans le tri des données structures. Cependant, toutes les fonctions de comparaison ne se comportent pas comme prévu avec std::sort, ce qui peut entraîner des plantages du programme.
Considérez l'extrait de code suivant :
#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]); }
Problème :
Dans le code original, la fonction de comparaison compare utilise a.a <= b.a pour comparer des éléments, ce qui permet à des éléments égaux de être considéré comme trié. Cela viole la règle de ordre faible strict requise par std::sort.
Solution :
Selon la règle d'ordre faible strict, pour tout éléments A, B et C dans une séquence, les conditions suivantes doivent être remplies :
La fonction de comparaison originale compare ne satisfait pas à cette règle car elle permet à A d'être égal à lui-même, conduisant à des boucles infinies potentielles dans std::sort. Pour résoudre ce problème, la fonction de comparaison doit être remplacée par la version corrigée affichée dans l'extrait de code ci-dessus.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!