Le code suivant génère une erreur de segmentation lorsqu'il est compilé avec GCC 6.1.0. Étrangement, l'erreur est cohérente, mais ne se produit pas avec des tailles plus petites ou des expressions de comparaison légèrement différentes. Est-ce que vous avez une idée pourquoi?Comportement erratique du tri std :: de GCC avec lambda
#include <vector>
#include <algorithm>
#include <iostream>
int main() {
int n = 1000;
std::vector<std::pair<double, double>> vec;
for(int i = 0; i < n; i++) {
vec.push_back(std::make_pair<double, double>((7*i)%3, (3*i)%5));
}
std::sort(vec.begin(), vec.end(), [](std::pair<double, double> const & p1, std::pair<double, double> const & p2) {return (p1.first < p2.first) || ((p1.first==p2.first)&& (p1.second <= p2.second));});
return 0;
}
Vous devriez savoir que si tout ce que vous voulez est une comparaison lexicogrphique, alors 'std :: pair' le fait déjà sans intervention de votre part. – StoryTeller
@StoryTeller Merci pour le conseil. Mais ce qui me dérange vraiment en ce moment, c'est la source de la faute de segmentation! –
La source est dans votre comparaison n'induisant pas une relation d'ordre correcte. Le code a un comportement indéfini à cause de cela. – StoryTeller