Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1040 connectés 

 


Dernière réponse
Sujet : [C++] trier un vector avec une fonction de comparaison
kikoho salut  
j'ai une classe  point défini comme suit:
float x;
float y;
std::list<point*>* list_point;
je souhaite trier list_point du point le plus proche au point le plus loin du point a qui appartient list_point.
est ce possible de le faire directement avec une fonction de comparaison qui utiliserai le x et le y .
Pour l'instant je n'ai reussi ce tri qu'en créant une nouvelle classe comprenant le pointeur vers le point et la distance au point.
 
globalement je souhaite avoir une fonction de comparason qui ressemblerai à ca(pour l'instant le compilateur n'accepte pas que j'utilise x et y dans la fonction de comparaison) :
 
struct MyGreater2 {
 bool operator() (const point* c1,const point* c2)
 {
float dist_c1=(c1->x-x)*(c1->x-x)+(c1->y-y)*(c1->y-y);
float dist_c2=(c2->x-x)*(c2->x-x)+(c2->y-y)*(c2->y-y);
 return dist_c1 < dist_c2;
 };
};

Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
kikoho salut  
j'ai une classe  point défini comme suit:
float x;
float y;
std::list<point*>* list_point;
je souhaite trier list_point du point le plus proche au point le plus loin du point a qui appartient list_point.
est ce possible de le faire directement avec une fonction de comparaison qui utiliserai le x et le y .
Pour l'instant je n'ai reussi ce tri qu'en créant une nouvelle classe comprenant le pointeur vers le point et la distance au point.
 
globalement je souhaite avoir une fonction de comparason qui ressemblerai à ca(pour l'instant le compilateur n'accepte pas que j'utilise x et y dans la fonction de comparaison) :
 
struct MyGreater2 {
 bool operator() (const point* c1,const point* c2)
 {
float dist_c1=(c1->x-x)*(c1->x-x)+(c1->y-y)*(c1->y-y);
float dist_c2=(c2->x-x)*(c2->x-x)+(c2->y-y)*(c2->y-y);
 return dist_c1 < dist_c2;
 };
};
z0rglub je sais mais ct urgent, et j'ai rien compris au cours précédent !
Je te jure que je viens mardi prochain. :jap:
chadenat Zorglub c'est pas bien de faire sauter les cours de réseaux pour finir son TP de C++
verdoux Oui soit tu définis un opérateur de comparaison pour les objets activités (et dans ce cas, plus besoin de fonction dans l'appel sort), soit tu définis un objet fonction de comparaison que tu mets dans l'appel sort.
Le troisième argument de sort n'est une fonction mais un oject fonction (ou foncteur).

 

--Message édité par Verdoux--

z0rglub ben j'arrive pas à lui faire comprendre d'utiliser la fonction de comparaison.
Mais avec l'aide de visual C++ je viens de trouver des trucs interessants :
il faudrait redéfinir des fonctions :
bool operator==(activités & a1, activités & a2)
et  
bool operator<(activités & a1, activités & a2)
 
mais je dois les déclarer en friend dans la classe activités car elles utilisent a1.date->heure par exemple
 
Je bosse dessus pour le moment
verdoux Qu'est ce qui marche pas ?
z0rglub salut,
j'ai des vector qui représentent des activités... avec des dates définies dans des structures :  
struct Date
{    int numero_semaine;
     int numero_jour;
     int heure;
}
 
et je voudrais trier les activités du vecteur par ordre chronologique en utilisant l'algorithme sort de la STL :
 
genre :
vector<activités> sports;
...
sort(sports.begin(), sports.end(), fonction_de_comparaison());
 
Mais ça ne semble pas marcher. SI qqun peut m'aider c'est cool, je saurais faire autrement sans utiliser la STL et le sort mais j'aimerais savoir l'utiliser car ça peut être pratique.
Merci à vous

Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR