Bonjour,
J'utilise la m�thode Alphasort() pour trier des mots.
Mais je n'ai pas trouv� la m�thode �quivalente pour trier des nombres.
Pouvez vous me renseigner.
merci
Bonjour,
J'utilise la m�thode Alphasort() pour trier des mots.
Mais je n'ai pas trouv� la m�thode �quivalente pour trier des nombres.
Pouvez vous me renseigner.
merci
Salut,
je sais pas si il existe une telle methode pour trier les nombres, mais ce que je te propose est de faire une fonction qui converti tes nombres en AnsiString, de les triers, puis de les retransformer en int...
++
Merci de ta r�ponse.
Mais en faisant cela , apr�s tri, je ne vais pas avoir par exemple cela:
1
10
2
au lieu de
1
2
10
En effet si je passe en ansistring, il va comparer caractere par caractere pour le tri non?
oui, en effet, je suis trop con :-)
dsl
Mais non t'es pas trop con.
J'ai fait aussi cette erreur, c'est pour sa que j'ai vu que sa marchait pas..![]()
En standard il y a std::sort pour trier n'importe quoi. Inclure <algorithm>.
Mieux que SDL : d�couvrez SFML
Mes tutoriels 2D/3D/Jeux/C++, Cours et tutoriels C++, FAQ C++, Forum C++.
Merci de ta r�ponse.
Mais je ne vois pas trop comment l'utiliser. Je travaille avec des listviews � plusieurs colonnes.
Merci de me donner une piste.
Sinon m�thode interm�diaire, tu peux regarder le nombre de chiffres max que tu as et tu rajoute le nombre de z�ros manquants en conc�quence, comme ca tu aura bien :
01
02
10
Et ensuite quand tu le repasse en int � mon avis le 0 saute (mais c'est � confirmer quand m�me)
Ah, hum... Quel est le type exact des donn�es que tu veux trier ? Elles sont stock�es dans quel genre de conteneur ?Envoy� par Cybher
Pour ce qui est du fonctionnement de std::sort, elle prend en param�tre une paire d'it�rateurs sur la s�quence � trier, et si on souhaite faire un tri utilisant un crit�re perso (c'est l'op�rateur < par d�faut qui est utilis�), on peut passer en troisi�me param�tre un foncteur (voir la FAQ C++).
Mieux que SDL : d�couvrez SFML
Mes tutoriels 2D/3D/Jeux/C++, Cours et tutoriels C++, FAQ C++, Forum C++.
J'ai une listview d'environ 400 lignes.
en fait, j'ai plusieurs colonnes dans ma listview: certaines colonnes contiennent du tecte, d'autres des nombres.
en cliquant sur une colonne, je voudrais trier selon cette colonne.
pour du texte j'ai r�ussi mais le probl�me vient quand je veux trier les nombres.
je n'aarive pas � le faire par nombre croissant.
je continue mes recherches
encore merci pour votre aide
je vais tester les m�thodes propos�es.
Tu as un exemple mutli-thread avec 3 types de tris diff�rents dans le dossier Exemples de C++ Builder.
Sinon tu cherches avec ton amiquelque chose comme
"tri rapide algorithme"
et il devrait te sortir quelque chose de symapthique![]()
Dans la fonction que tu utilises pour la comparaison des �l�ments, tu peux sans doute distinguer les 3 cas suivants:
cas 1 : les deux �lements sont num�riques => tu renvoies la comparaison des nombes correspondants
cas 2 : les deux �l�ments sont alphab�tiques => tu renvoies la comparaison des cha�nes correspondantes
cas 3 : l'un est num�rique l'autre est alphab�tique, tu renvoies le fait que le nombre est "plus petit" que la cha�ne
"La haine seule fait des choix" - Koan Zen
"Il ne faut pas �tre meilleur que les autres, il faut �tre meilleur que soi." Albert Jacquard
"Ceux qui savent o� ils ont pos� leur parapluie ne sont pas alcooliques." - pgibonne.
Faites du Prolog, �a vous changera les id�es !
Ma page Prolog
Mes codes sources comment�s
Mon avatar : La Madeleine � la veilleuse de Georges de La Tour
merci de vos r�ponses
en fait je n'ai que le cas 1 ou 2.
Sachant que je n'ai pas de porbl�me pour les �l�ments alphab�tiques.
Il me reste les �l�ments num�riques.
Je verrai sa un peu plus tard car je suis en stage et on m'a demand� de passer � autre chose pour le moment.(il n'a que cela qui ne fonctionnait pas)
mais j'essaierais de regard� entre deux.
Merci de vos conseils.
Bonjour,
Pour plus tard, donc
Il te faut impl�menter le gestionnaire d'�v�nements OnCompare du ListView. Il est appel� pour comparer un �l�ment � un autre, m�me avec AlphaSort. De la sorte que tu peux appeler AlphaSort m�me pour trier des valeurs num�riques, il s'agit pour toi d'�crire le gestionnaire ad�quat (conversion de l'AnsiString en int et comparaison par exemple).
Cordialement,
Arnaud
A lire : Les r�gles du forum
Juste en passant, une proposition d'impl�mentation :
Pr�requis : pour chaque colonne du TListView, positionner sa propri�t� Tag � 0 si il faut faire une comparaison de cha�nes, � toute autre valeur pour une comparaison num�rique
gestionnaire d'�v�nements OnColumnClick
gestionnaire d'�v�nements OnCompare
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5 // mémorisation de la colonne à trier ((TListView*) Sender)->Tag = Column->Index; // déclenchement du tri ((TListView*) Sender)->AlphaSort();
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 TListView * lst = (TListView *) Sender; if (lst->Columns->Items[lst->Tag]->Tag == 0) // Comparaison chaînes { AnsiString A1; AnsiString A2; if (lst->Tag == 0) { A1 = Item1->Caption; A2 = Item2->Caption; } else { A1 = Item1->SubItems->Strings[lst->Tag - 1]; A2 = Item2->SubItems->Strings[lst->Tag - 1]; } Compare = AnsiCompareStr(A1,A2); } else // comparaison numérique { int I1; int I2; if (lst->Tag == 0) { I1 = Item1->Caption.ToInt(); I2 = Item2->Caption.ToInt(); } else { I1 = Item1->SubItems->Strings[lst->Tag - 1].ToInt(); I2 = Item2->SubItems->Strings[lst->Tag - 1].ToInt(); } Compare = I1 - I2; }
A lire : Les r�gles du forum
Merci GreyBird,
J'utilisais en effet l'�v�nement on compare pour mon alphasort.
J'essai de regarder cela ce midi.
Merci pour vos aides.
Et bien sa fonctionne!!
Au risque de me r�p�ter merci � tous et en particulier � GreyBird!
Sa m�thode fonctionne parfaitement.
![]()
Partager