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

  FORUM HardWare.fr
  Programmation
  C++

  tri d'un tableau d'objet suivant une relation d'ordre

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

tri d'un tableau d'objet suivant une relation d'ordre

n°924311
jlinho2
Posté le 15-12-2004 à 18:29:59  profilanswer
 

Bonjour,
mon problème concerne la fonction
stable_sort (ou sort)
 
je désire trier un "vector<Concept>" ou Concept est une classe définie
Dans la classe Concept les opérateurs <,<=,==,>=,>,!= ont étés surdéfinis
afin notamment que < définisse un ordre.
 
j'écris alors:
stable_sort(vect.begin(),vect.end(), ???????);
 
comme il faut préciser la relation d'ordre à la place de ????
j'ai mis "less<Concept>" ce qui, il me semble doit faire référence
à l'opérateur < de la classe Concept.
 
j'ai aussi inclu <functional>
 
mais rien à faire ça ne compile pas...
sinon le stable_sort (ou le sort) sans le 3eme argument compile mais
provoque une segmentation fault à l'éxécution.
 
Merci de m'aider.  
d'autre part je suis débutant C++ (mais pas C ni Java) alors aller y doucement avec la technique SVP.


Message édité par jlinho2 le 15-12-2004 à 18:34:05
mood
Publicité
Posté le 15-12-2004 à 18:29:59  profilanswer
 

n°924327
Taz
bisounours-codeur
Posté le 15-12-2004 à 18:43:35  profilanswer
 

le 3ème paramètre est optionnel.
 
std::sort(vect.begin(), vect.end()); et voilà

n°924733
jlinho2
Posté le 16-12-2004 à 08:28:45  profilanswer
 

En fait le problème n'est pas celui que j'ai exposé...en effet les 2 paramètres sufissent pour réussir à compiler. mais le programme s'executre avec une erreur (probablement segfault)
 quand je fais sort(v.begin(),v.end()-1) ça passe mais me le tri n'inclu evidemment pas le dernier élément t si je fais
sort(v.begin(),v.end()) j'ai une segmentation fault....
bizarre d'autant plus que tous les éléments ont étés insérér avec
vect.push_back(objet)
et que la fonction d'affichage des objets du tableau s'exécute, elle accede a tous les elements du tableau sans faire de segfault....

n°924749
Taz
bisounours-codeur
Posté le 16-12-2004 à 09:15:28  profilanswer
 

ben le problème, c'est ton code à toi, pas sort. vérifie ton code, utilise un débugger

n°924756
jlinho2
Posté le 16-12-2004 à 09:21:16  profilanswer
 

Oui je me doute que le problème c'est mon code à moi.Ca je l'ai compris, mais je voulais simplement savoir si certains avaient déjà rencontrés la m^meme erreur.

n°924758
Taz
bisounours-codeur
Posté le 16-12-2004 à 09:24:51  profilanswer
 

ça se saurait depuis le temps

n°924760
schnapsman​n
Zaford Beeblefect
Posté le 16-12-2004 à 09:34:27  profilanswer
 

Taz a écrit :

ça se saurait depuis le temps


+1  :o


---------------
From now on, you will speak only when spoken to, and the first and last words out of your filthy sewers will be "Sir!"
n°924790
frenchkiss
Posté le 16-12-2004 à 10:13:52  profilanswer
 

je pense pas qu'il faisait reference a une erreur sur le sort lui meme . mais bien a son code "a lui" et pour savoir si d autre avait deja eu le meme style de probleme.
 
-2

n°924793
frenchkiss
Posté le 16-12-2004 à 10:15:58  profilanswer
 

deja tu pourrai rajouter des traces pour voir si on < est bien apelle. ca t eviterai de douter . et par la meme occasion tu trouverai peut etre celui qui fait crasher..

n°924805
jlinho2
Posté le 16-12-2004 à 10:37:37  profilanswer
 

Citation :

je pense pas qu'il faisait reference a une erreur sur le sort lui meme . mais bien a son code "a lui" et pour savoir si d autre avait deja eu le meme style de probleme.


--> bah oui... et pour mon premier post je n'étais pas sûr de mon emploi de la fonction sort c'est tout...
 

Citation :


deja tu pourrai rajouter des traces pour voir si on < est bien apelle. ca t eviterai de douter  


--> apparemment le < est bien appelé puisque lorsque je trie que les N-1 premiers éléments (N étant la taille du tableau) avec le < de la classe 'Concept" ça marche (enfin dans certains cas :().
 
En attendant que je trace tout ça au debugger je dépose quelques lignes de code (le moins possible)...
 
l'objet concept
Concept.h

Code :
  1. class Concept
  2. {
  3.     protected:
  4.         string nom_associe;
  5.         unsigned int pts_occ;
  6.         unsigned int pts_mf;
  7.         float pts_total;
  8.      
  9.     public:
  10.         Concept(string nom);
  11.         void set_pts_total(const float f);
  12.         bool operator < (const Concept & autre) const;
  13. }


Concept.cpp

Code :
  1. Concept::Concept(string nom) {nom_associe=nom;pts_occ=pts_mf=0;pts_total=0;}
  2. void Concept::set_pts_total(const float f)
  3. {pts_total=f;}
  4. bool Concept::operator < (const Concept & autre)
  5. const
  6. {return pts_total < autre.pts_total;}


 
et un fichier de test qui plante

Code :
  1. int main(int argc, char *argv[])
  2. {
  3.   Concept A("famille" );
  4.   A.set_pts_total(1.1);
  5.   Concept B("familiales" );
  6.   B.set_pts_total(2.2);
  7.   Concept C("poulet" );
  8.   C.set_pts_total(3.3);
  9.   vector<Concept> v;
  10.   v.push_back(A);
  11.   v.push_back(B);
  12.   v.push_back(C);
  13.   system("PAUSE" ); //une pause juste avant le plantage
  14.   sort(v.begin(),v.end());
  15.   return 0;
  16. }

 
 
Voilà je reviens cette aprem avec les traces


Message édité par jlinho2 le 16-12-2004 à 10:40:25
mood
Publicité
Posté le 16-12-2004 à 10:37:37  profilanswer
 

n°924889
HelloWorld
Salut tout le monde!
Posté le 16-12-2004 à 11:49:00  profilanswer
 

Tu as quel compilateur (+ version) ?
Utilise un deboguer, il t'emène direct sur le lieu de l'erreur.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°925261
jlinho2
Posté le 16-12-2004 à 18:15:31  profilanswer
 

En effet après changement de compilo ça passe

n°925323
HelloWorld
Salut tout le monde!
Posté le 16-12-2004 à 19:47:41  profilanswer
 

lequel -> lequel ?


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°925328
blackgodde​ss
vive le troll !
Posté le 16-12-2004 à 20:00:48  profilanswer
 

[HS]
(const float f) => le const est inutile, c'est une copie
[/HS]


---------------
-( BlackGoddess )-
n°925332
Taz
bisounours-codeur
Posté le 16-12-2004 à 20:06:45  profilanswer
 

jlinho2 a écrit :

En effet après changement de compilo ça passe

et si tu foutais ton operator< en fonction libre :o

n°925455
jlinho2
Posté le 16-12-2004 à 22:10:16  profilanswer
 

c'est quoi une fonction libre? (je fait du C++ depuis 3 jours je précise)
----
sinon il semblerait que la véritable cause du problème était un opérateur d'affectation "operator=" que j'avais surdéfini inutilement.
----
sinon en disant changement de compilateur j'aurais plutôt dû dire changement d'environnement de developpemment (et ceux ci font plein de trucs dans mon dos..optimisations et autres)...  
je suis passé de DevC++(version 5 beta) à Borland C++ builder...
mais comme je le dis la cause serait l'operateur d'affectation (pourant je m'en servait jamais) mais la fonction sort probablement oui...
j'ai été idiot de pas mettre tout mon code et que des morceaux (même si il me semblaient servir a rien car inutilisés explicitement)...désolé je m'excuse


Message édité par jlinho2 le 16-12-2004 à 22:12:16
n°926372
Panini
Posté le 17-12-2004 à 19:43:03  profilanswer
 

fonction libre = fonction à la C, pas une méthode de classe donc :
 
bool operator < (const Concept & c1, const Concept & c2);

n°926812
jlinho2
Posté le 18-12-2004 à 11:35:33  profilanswer
 

OK j'ai pigé merci


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  tri d'un tableau d'objet suivant une relation d'ordre

 

Sujets relatifs
Initiation à la programmation "objet"Structure en forme de tableau
Tableau et ImpressionProblème de tableau CSS
Importer tableau texte sous C[HTML] Question taille tableau
Problème avec la taille d'un tableau [résolu]Ecore et toujours ces fameux tableau
Récuperer un objet Word dans un iframePetit problème - tableau
Plus de sujets relatifs à : tri d'un tableau d'objet suivant une relation d'ordre


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