tri d'un tableau d'objet suivant une relation d'ordre - C++ - Programmation
Marsh Posté le 15-12-2004 à 18:43:35
le 3ème paramètre est optionnel.
std::sort(vect.begin(), vect.end()); et voilà
Marsh Posté le 16-12-2004 à 08:28:45
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....
Marsh Posté le 16-12-2004 à 09:15:28
ben le problème, c'est ton code à toi, pas sort. vérifie ton code, utilise un débugger
Marsh Posté le 16-12-2004 à 09:21:16
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.
Marsh Posté le 16-12-2004 à 09:34:27
Taz a écrit : ça se saurait depuis le temps |
+1
Marsh Posté le 16-12-2004 à 10:13:52
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
Marsh Posté le 16-12-2004 à 10:15:58
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..
Marsh Posté le 16-12-2004 à 10:37:37
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 : |
--> 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 :
|
Concept.cpp
Code :
|
et un fichier de test qui plante
Code :
|
Voilà je reviens cette aprem avec les traces
Marsh Posté le 16-12-2004 à 11:49:00
Tu as quel compilateur (+ version) ?
Utilise un deboguer, il t'emène direct sur le lieu de l'erreur.
Marsh Posté le 16-12-2004 à 19:47:41
ReplyMarsh Posté le 16-12-2004 à 20:00:48
[HS]
(const float f) => le const est inutile, c'est une copie
[/HS]
Marsh Posté le 16-12-2004 à 20:06:45
jlinho2 a écrit : En effet après changement de compilo ça passe |
et si tu foutais ton operator< en fonction libre
Marsh Posté le 16-12-2004 à 22:10:16
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
Marsh Posté le 17-12-2004 à 19:43:03
fonction libre = fonction à la C, pas une méthode de classe donc :
bool operator < (const Concept & c1, const Concept & c2);
Marsh Posté le 15-12-2004 à 18:29:59
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