Bonjour a tous, question simple mais je ne trouve pas de reponse.
J'ai une list de ce genre :
A3
C3
AA3
AB3
Z3
Y3
et lorsque j'utilise le fameux qsort j'obtiens :
A3
AA3
AB3
C3
Y3
Z3
Alors que je voudrais
A3
C3
Y3
Z3
AA3
AB3
Comment faire ? :/
Bonjour a tous, question simple mais je ne trouve pas de reponse.
J'ai une list de ce genre :
A3
C3
AA3
AB3
Z3
Y3
et lorsque j'utilise le fameux qsort j'obtiens :
A3
AA3
AB3
C3
Y3
Z3
Alors que je voudrais
A3
C3
Y3
Z3
AA3
AB3
Comment faire ? :/



Bonjour,
Si tu regardes bien le man de qsort, tu verras que tu peux définir une fonction de comparaison.
EDIT : oups encore confondu entre C et C++... Bon dans les deux cas on peut définir une fonction de comparaisons^^
Merci de ta rapidite, mais etant encore debutant en c++, j'avoue que tu me parles un peu chinois la.
J'ai trouve ca, mais j'avoue ne pas savoir quoi faire avec....
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 bool caseInsensitiveLessThan(const QString &s1, const QString &s2) { return s1.toLower() < s2.toLower(); } int doSomething() { QStringList list; list << "AlPha" << "beTA" << "gamma" << "DELTA"; qSort(list.begin(), list.end(), caseInsensitiveLessThan); // list: [ "AlPha", "beTA", "DELTA", "gamma" ] }



Tu ne veux pas trier par ordre alphabétique mais trier par ordre numérique en base 36 (?)
Donc tu peux en premier lieu comparer la taille de tes chaînes et si elles sont égales, comparées tes chaînes avec l'opérateur < (ou >).
ok donc éventuellement je pourrai faire ca ? :
Pour signifier que les "doubles" lettres doivent se placer apres les simples ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 bool MafonctionDeComparaisonQueJeVeux() { return z<aa; }
Ca me parait un peu trop simple...
De plus ou definir cette nouvelle methode ?








Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 int doSomething(const QString &str1, const QString &str2) { if (str1.length() != str2.length()) return (str1.length() < str2.length()); else return (str1.toLower() < str2.toLower()); }
qsort prend un pointeur sur fonction int MyMethod(const void*a, const void*b) qui doit retourner -1 si a < b, 0 si a == b, +1 si a > b
http://en.cppreference.com/w/cpp/algorithm/qsort
http://www.cplusplus.com/reference/clibrary/cstdlib/qsort/
Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
Un peu de programmation réseau ?
Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.
Bonjour,
il te faut utiliser ton propre prédicat de comparaison.
Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
Un peu de programmation réseau ?
Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.
Partager