[c++] tri de tableau
Fermé
robert
-
16 déc. 2006 à 22:40
mamiemando Messages postés 32283 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 17 mars 2023 - 18 déc. 2006 à 00:42
mamiemando Messages postés 32283 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 17 mars 2023 - 18 déc. 2006 à 00:42
A voir également:
- [c++] tri de tableau
- Tableau croisé dynamique - Guide
- Le fichier contient une liste de prénoms. triez ce tableau par ordre alphabétique des prénoms. quel mot est formé par les 6 premières lettres de la colonne code ? - Forum Bureautique
- Afficher un tableau en c - Forum C
- Tableau ascii - Guide
- Le fichier contient une liste de prénoms. triez ce tableau par ordre alphabétique des prénoms - Forum Excel
3 réponses
Lapinkiller
Messages postés
674
Date d'inscription
samedi 15 avril 2006
Statut
Membre
Dernière intervention
30 août 2010
101
17 déc. 2006 à 14:38
17 déc. 2006 à 14:38
je pense qu'il y a plus simple
moi j'ai fait un tri d'un tableau a une dimension en une dizaine de lignes
en gros je prenais une case (la 1ere pour commencer) et je la comprai a celle d'apres et je permutait les deuc cases si l'une devait eytre avant ou apres l'autre (selon le tri que tu veu faire) une fois que j'avai comprarer la premier case avec celle d'apres je prenai la deuxieme case que je comparais avec celle d'apres et ainsi de suite jusqu'a l'avant dernier case ou la le tableau doit etre trie
j'ai creer une methode permuter
et sinon j'ai utiliser 2 boucle pour et un si (pour verifier si y'a besoin de permuter)
voila si ca peut t'aider...
moi j'ai fait un tri d'un tableau a une dimension en une dizaine de lignes
en gros je prenais une case (la 1ere pour commencer) et je la comprai a celle d'apres et je permutait les deuc cases si l'une devait eytre avant ou apres l'autre (selon le tri que tu veu faire) une fois que j'avai comprarer la premier case avec celle d'apres je prenai la deuxieme case que je comparais avec celle d'apres et ainsi de suite jusqu'a l'avant dernier case ou la le tableau doit etre trie
j'ai creer une methode permuter
et sinon j'ai utiliser 2 boucle pour et un si (pour verifier si y'a besoin de permuter)
voila si ca peut t'aider...
Lapinkiller
Messages postés
674
Date d'inscription
samedi 15 avril 2006
Statut
Membre
Dernière intervention
30 août 2010
101
16 déc. 2006 à 23:17
16 déc. 2006 à 23:17
en fait tu veu trier ton tableau du plus petit au plus grand c'est ca ? avec t comme reference de triage...
mamiemando
Messages postés
32283
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
17 mars 2023
7 572
17 déc. 2006 à 02:53
17 déc. 2006 à 02:53
Il faut redéfinir l'opérateur < sur ta classe point ou définir un foncteur.
Exemple :
Par defaut si le comparateur du set n'est pas spécifié, on utilise le foncteur par défaut qui repose sur le relation < (ici celle de la classe Point). Dans ton cas il faudrait définir l'opérateur < pour pouvoir écrire directement :
Exemple :
Bonne chance
Exemple :
#include <set>
#include <iostream>
class Point{
public:
double x,t;
Point(const double & x0,const double & t0):x(x0),t(t0){}
//...
};
struct cmp_time{
inline bool operator()(const Point & p1,const Point & p2){
return p1.t < p2.t || (p1.t == p2.t && p1.x < p2.x);
}
}
int main(){
// Construire l'ensemble de points ordonnés sur le temps
Point p1(3,5),p2(7,2),p3(6,9);
std::set<Point,cmp_time> ens_pts;
ens_pts.insert(p1);
ens_pts.insert(p2);
ens_pts.insert(p3);
// Afficher l'ensemble de poitns
std::set<Point,cmp_time>::const_iterator
sit(ens_pts.begin()),send(ens_pts.end())
for(;sit!=send;++sit){
const Point & pcur = *sit;
std::cout << pcur.x << '\t' << pcur.t << std::endl;
}
return 0;
}
Par defaut si le comparateur du set n'est pas spécifié, on utilise le foncteur par défaut qui repose sur le relation < (ici celle de la classe Point). Dans ton cas il faudrait définir l'opérateur < pour pouvoir écrire directement :
std::set<Point>
Exemple :
...
inline bool operator<(const Point & p1,const Point & p2){
return p1.t < p2.t || (p1.t == p2.t && p1.x < p2.x);
}
int main(){
std::set<Poiont> ens_points2;
//...
return 0;
}
Bonne chance
17 déc. 2006 à 17:09
bien cordialement
18 déc. 2006 à 00:42
inline bool operator<(const Point & p1,const Point & p2){ return p1.t < p2.t || (p1.t == p2.t && p1.x < p2.x); }Les foncteurs sont intéressant si un opérateur < a déjà été défini et qu'on souhaite utiliser une autre relation d'ordre pour trier le set. A noter que si les doublons sont autorisés dans la liste, il faut utiliser un multiset.
Bonne chance