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 ami quelque chose comme
"tri rapide algorithme"
et il devrait te sortir quelque chose de symapthique
Neilos
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.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager