[LCP2]Alternative à qsort

Voir le sujet précédent Voir le sujet suivant Aller en bas

[LCP2]Alternative à qsort

Message  Bill le Ven 30 Déc 2011, 22:02

Bonsoir,

Cet après-midi, j'étais en train de faire une interro 2 du labo CPP (yes, we can) et donc j'ai utilisé des vecteurs d’État, mais au moment de faire le tri, je me suis retrouvé bloqué avec le qsort.
J'ai commencé à faire des recherches pour savoir comment faire le tri avec qsort et les vecteurs, et durant ces recherches, je suis tombé sur une autre méthode pour faire le tri, c'est std::sort.
Elle fonctionne très bien, mais je me demande si les professeurs sanctionnent les étudiants qui utilisent/utiliseraient std::sort à la place de qsort (car c'est quand même demandé explicitement d'utiliser qsort).
Si c'est le cas, y a t'il un moyen de faire un qsort avec des vecteurs ? (et si vous avez un exemple, ce serait génial !)

Merci d'avance !

Bill

Nombre de messages : 73
Age : 27
Prénom : Kevin
Statut : Ancien
Localisation : Brussels
Date d'inscription : 07/10/2009

Revenir en haut Aller en bas

Re: [LCP2]Alternative à qsort

Message  smb le Ven 30 Déc 2011, 23:16

Bill a écrit:Bonsoir,

Cet après-midi, j'étais en train de faire une interro 2 du labo CPP (yes, we can) et donc j'ai utilisé des vecteurs d’État, mais au moment de faire le tri, je me suis retrouvé bloqué avec le qsort.
J'ai commencé à faire des recherches pour savoir comment faire le tri avec qsort et les vecteurs, et durant ces recherches, je suis tombé sur une autre méthode pour faire le tri, c'est std::sort.
Elle fonctionne très bien, mais je me demande si les professeurs sanctionnent les étudiants qui utilisent/utiliseraient std::sort à la place de qsort (car c'est quand même demandé explicitement d'utiliser qsort).
Si c'est le cas, y a t'il un moyen de faire un qsort avec des vecteurs ? (et si vous avez un exemple, ce serait génial !)

Merci d'avance !

Utiliser std::sort est une meilleure idée que qsort, et je ne crois pas que mes collègues "CéPéPéistes" me contrediront !

smb

Nombre de messages : 1035
Age : 64
Prénom : Stéphan
Statut : Don de sang, don de vie!
Localisation : Spy
Date d'inscription : 23/01/2007

Revenir en haut Aller en bas

Re: [LCP2]Alternative à qsort

Message  didi le Sam 31 Déc 2011, 14:21

bonjour Smile

j'ai un probleme avec sort Sad

je fait l'interro Méteo Belgique

j'arrive à parcourir le zone (1ère étape ) et afficher mais pour trier j'arrive pas Sad

Journee.h

Code:
#ifndef JOURNEE_H_
#define JOURNEE_H_
#include <string>
#include <vector>

using namespace std;
class Journee {
private :
      unsigned int mois;
      unsigned int jour;
      float tempMax;
      float tempMin;
      float precip;
      unsigned int min;

public :

      Journee(unsigned int m=1,unsigned intj=1,float tMx=1,float tMn=0,float prc=1,unsigned int mn=60);
      Journee(const Journee& autre);
      Journee& operator=(const Journee& autre);
      int operator>(const Journee& autre);
      std::string toString();
//      friend ostream & operator << (ostream &sortie,  Journee &unPlateau);
      unsigned int getJour(){return jour;};
      Journee getMax(vector<Journee> tab);
};


#endif /* JOURNEE_H_ */





Journee.cpp
Code:


#include "Journee.h"
#include <sstream>
#include "string.h"
using namespace std;

Journee::Journee(unsigned int m,unsigned int j,float tMx,float tMn,float prc,unsigned int mn)
         :mois(m),jour(j),tempMax(tMx),tempMin(tMn),precip(prc),min(mn) {

}

Journee::Journee(const Journee& autre)   {
   if(this != &autre)   {
      this->jour = autre.jour;
      this->mois = autre.mois;
      this->tempMax = autre.tempMax;
      this->tempMin = autre.tempMin;
      this->precip = autre.precip;
      this->min = autre.min;
   }

}

Journee& Journee::operator=(const Journee& autre)   {
   if(this != &autre)   {
         this->jour = autre.jour;
         this->mois = autre.mois;
         this->tempMax = autre.tempMax;
         this->tempMin = autre.tempMin;
         this->precip = autre.precip;
         this->min = autre.min;
      }
   return *this;
}


string Journee::toString()   {
   string j;
   ostringstream s;
   s << this->jour << "/" << this->mois << "\t" << this->tempMax << "\t"
         << this->tempMin  << "\t" << this->precip << "\t"<< this->min;
   j = s.str();
   return j;
}
int Journee::operator>(const Journee& autre)   {
   int res =0;
   if((this->mois > autre.mois) ||(this->mois == autre.mois && this->jour > autre.jour ))   {
      res = 1;
   } else if ((this->mois < autre.mois) || (this->mois == autre.mois && this->jour < autre.jour )) {
      res = -1;
   }
   return res;
}

Journee Journee::getMax(vector<Journee> tab)   {
   Journee max = tab.at(0);
   vector<Journee>::iterator it;
   for(it = tab.begin(); it < tab.end();it++)   {
      if((*it).precip > max.precip)   {
         max = *it;
      }else if((*it).precip == max.precip)   {
         if(((*it).mois < max.mois))   {
            max = *it;
         } else if(((*it).mois == max.mois) && ((*it).jour < max.jour))   {
            max = *it;
         }
      }
   }
   return max;
}



Main.cpp
Code:




#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
#include <sstream>
#include "string.h"
#include "meteo.h"
#include "Journee.h"

using namespace std;
int main() {
   Journee journ;
   ostringstream oss;
   istringstream iss;
   string mystr,str2=" ";
   string *ptr_s;
   int pos;
   unsigned int nb;
   unsigned int unMois,unJour,uneMin;
   float unTmx,unTmn,unPrc;
   ptr_s = getStatistiques(&nb);
   vector<Journee> tab = vector<Journee>(nb);
   for(unsigned int i = 0; i < nb; i++ ) {
      mystr = *(ptr_s+i);
         while( (pos = mystr.find("/")) != string::npos)   {
            mystr.replace(pos,1,str2);
         }
         while( (pos = mystr.find(";")) != string::npos)   {
               mystr.replace(pos,1,str2);
         }
         iss.str(mystr);
         iss >> unMois >> unJour >> unTmx >> unTmn >> unPrc >> uneMin;
         tab[i] = Journee(unMois,unJour,(unTmx/10),(unTmn/10),unPrc,uneMin);
         cout << tab[i].toString() << endl;
         iss.clear();
   }
    vector<Journee>::iterator dep;
    vector<Journee>::iterator fin = tab.begin()+5;
    cout << "\nLes premieres 5 journees sont  : \n\n" ;
   for(dep = tab.begin(); dep < fin; dep++)   {
      cout << (*dep).toString() << endl;
   }


   fin = tab.end();

    cout << "\nLes derniers 5 journees sont  : \n\n" ;
   for(dep = tab.end()-5;  dep < fin; dep++)   {
      cout << (*dep).toString() << endl;
   }


   cout << "\nLe quantité de précipitation est  : " << (journ.getMax(tab)).toString();
   cout << "\nLe nombres de journee est : " << tab.size();

   sort(tab.begin(),tab.end(),Journee()); //ici le problem mais je ne sais pas ...

   return 0;
}



et bien redefini l'opérator> pour comparer l'objet dans la classe Journee


je vien d'ajouter un methode compare avant le main


Code:
bool compare(Journee a,Journee b)   {
   bool res =0;
   if((a.getMois() > b.getMois()) ||(a.getMois() == b.getMois() && (a.getJour() > b.getJour())))   {
      res = 1;
   } else if ((a.getMois() < b.getMois()) || (a.getMois() == b.getMois() && a.getJour() < b.getJour() )) {
      res = -1;
   }
   return res;
}

et le sort est :
Code:
sort(tab.begin(),tab.end(),compare);

et maintenant c'est erreur d'execution ............SadSadSad



merci d'avance







didi

Nombre de messages : 215
Prénom : Dinesh
Statut : Smile
Date d'inscription : 21/01/2009

Revenir en haut Aller en bas

Re: [LCP2]Alternative à qsort

Message  smb le Sam 31 Déc 2011, 19:06

Si tu souhaites utiliser sort "par défaut" tu dois mettre dans la classe Journee une surcharge de <

Comment ?

Soit par méthode interne dont le prototype doit être :

bool operator< (const Journee & d) const ;

Soit par une fonction amie dont le prototype mis dans la classe doit être :

friend bool operator< ( const Journee & g, const Journee & d ) ;

Je ne vois rien de tout cela dans ton code !

smb

Nombre de messages : 1035
Age : 64
Prénom : Stéphan
Statut : Don de sang, don de vie!
Localisation : Spy
Date d'inscription : 23/01/2007

Revenir en haut Aller en bas

Re: [LCP2]Alternative à qsort

Message  M. Pixel le Dim 01 Jan 2012, 11:22

Je me permets d'ajouter que std::sort a 2 prototypes (source):
Code:
template <class RandomAccessIterator>
  void sort ( RandomAccessIterator first, RandomAccessIterator last );

template <class RandomAccessIterator, class Compare>
  void sort ( RandomAccessIterator first, RandomAccessIterator last, Compare comp );

Par conséquent, il faut que la classe contienne une redéfinition de l'operator< comme M. Monbaliu l'indique afin de pouvoir utiliser le premier prototype.
Le second prototype prend un objet ou une fonction de comparaison. L'operator< de la classe ne sera donc pas utilisé, si il existe.

Si je ne me trompe pas, le code suivant me parait donc correct, vu que compare est une fonction de comparaison correcte. Je suspecte donc que l'erreur à l'exécution provient d'autre-part (as-tu essayé d'utiliser le debugger pour trouver quelle instruction plante? vérifie le call stack si nécessaire).
Code:
sort(tab.begin(),tab.end(),compare);

Maintenant, vu que tu as l’opportunité d'écrire Journee toi-même, je pense qu'il est beaucoup plus favorable d'employer le premier prototype et, comme M. Monbaliu l'a montré, de redéfinir l'operator<. C'est plus lisible, mais en plus, tu pourras employer l'operateur plus tard si nécessaire.

Je n’emploierait le deuxième prototype seulement lorsque la classe dont il s'agit n'est pas une classe que tu as écrite toi-même (provenant d'une librairie, par exemple), et à laquelle tu ne peux rien ajouter sans en créer une classe fille...



En ce qui concerne std::sort vs qsort: je pense que la première question qu'il faut se poser est "laquelle est la plus performante?". Une fonction de tri est chère en termes de performances. Heureusement, les deux fonctions ont les mêmes complexités (hormis quelques copies mémoire de plus pour std::sort): O(n²) worst, O(nLog(n)) best/avg. Ceci est également une indication que std::sort utilise sa variante C qsort().

std::sort vs qsort est donc similaire à cout vs printf, fstream vs fonctions I/O C, etc.: Si tu programmes en C++, autant utiliser la version C++ alors.
D'ailleurs, le fait que std::sort s'appelle std::sort, permet aux responsables du standard C++ de modifier l’algorithme utilisé. Si demain on décide d'utiliser mergesort par exemple (O(nlog(n) worst-case, et on ne peut pas faire mieux!), les librairies standards seront modifiées, mais ton programme ne changera pas d'une ligne!

M. Pixel

Nombre de messages : 19
Prénom : Etienne
Localisation : 0x7C00
Date d'inscription : 15/12/2010

Revenir en haut Aller en bas

Re: [LCP2]Alternative à qsort

Message  smb le Dim 01 Jan 2012, 12:00

M. Pixel a écrit:
(...)
Si je ne me trompe pas, le code suivant me parait donc correct, vu que compare est une fonction de comparaison correcte.
(...)

Pas d'accord ! La fonction compare c'est du n'importe quoi ! Elle retourne un bool et dans le code, c'est 1 , 0 ou -1 qui est retourné ! Un peu suspect, non ?

Je crois que ce serait plus correct d'écrire :
Code:
bool compare ( const Journee & a, const Journee & b ) {
    return (a.getMois()*100+a.getJour()) < (b.getMois()*100+b.getJour()) ;
}

smb

Nombre de messages : 1035
Age : 64
Prénom : Stéphan
Statut : Don de sang, don de vie!
Localisation : Spy
Date d'inscription : 23/01/2007

Revenir en haut Aller en bas

Re: [LCP2]Alternative à qsort

Message  M. Pixel le Dim 01 Jan 2012, 12:18

Ah oui en effet, je n'ai pas fait attention à ça! Le code de la fonction est assez absurde en effet...


Par ailleurs, en relisant le premier message, j'ai remarqué cette question "utiliser qsort sur un vecteur"? Cela n'aurait pas beaucoup de sens, mais la question m'intrigue, vu qu'au premier coup, on aurait tendance à dire "il suffit d'écrire une fonction de comparaison pour le vecteur". Cependant, vu q'un vecteur est un objet, et non pas un tableau, cela ne fonctionnera pas! En plus, std::vector n'a pas de fonction qui retourne le tableau interne (similaire à std::string.c_str()). (Une discussion intéressante sur stackoverflow traite ce sujet).

Mais il contient un tableau (bien qu'on ne connait pas l'implémentation d'un vecteur, apparemment on peut supposer que les éléments sont bien stockés dans un tableau "à la C" selon cette source). Passer &monvecteur[0] serait donc similaire à passer un tableau C en paramètre à qsort(), et ce pour tout compilateur?


PS: Joyeuse année 2012 Very Happy

M. Pixel

Nombre de messages : 19
Prénom : Etienne
Localisation : 0x7C00
Date d'inscription : 15/12/2010

Revenir en haut Aller en bas

Re: [LCP2]Alternative à qsort

Message  Hana le Dim 01 Jan 2012, 23:50

Moi j'utilise aussi sort pour l'interro 2009-2010 sur les horaires et j'obtiens aussi une erreur d'exécution. Apprès debugging j'ai trouvé que l'erreur se lance lorsqu'on essaie de comparer le dernier élément de mon vecteur (tab.end() qui contient des données tout à fait anormales) avec un autre. Mon surcharge < semble fonctionner correctement. J'ai utilisé tab.push_back(...) pour stocker mes données dans le vecteur et j'ignore pourquoi j'obtiens que des 0 pour le dernier et uniquement le dernier élément.

Je vous mets le main:
Code:
//============================================================================
// Name        : i2-2009-2010-horaire.cpp
// Author      : g35405
// Version    :
// Copyright  :
// Description : Interro janvier 2009-2010
//============================================================================

#include <iostream>
#include <cstdlib>
#include <vector>
#include <algorithm>
#include "Attribution.h"
#include "Outils.h"

using namespace std;

int main() {
   void *seq, *attr;
   int nbSeq, i, j;
   float *nbAttr, **seqSuiv;
   Attribution *unAttr;
   vector <Attribution> tab;

   seq = getSeqAttrib(&nbSeq);
   for (j = 0; j < nbSeq; j++){
      nbAttr = (float *)seq;
      attr = (void *)(nbAttr + 1);
      if (*nbAttr > 0){
         for (i = 0; i < *nbAttr; i++){
            unAttr = new Attribution(attr);
            tab.push_back(*unAttr);
            attr = unAttr->getSuiv();
            cout << tab[i].toStringL() << endl;
         }
      }
      seqSuiv = (float **)attr;
      seq = (void *)(*seqSuiv);
   }

   cout << "!!!" << tab.begin()->toStringL() << endl;
   cout << "!!!" << tab.end()->toStringL() << endl;            //Pas d'erreur d'exécution ici
   sort(tab.begin(), tab.end());                              //Erreur d'exécution ici
   cout << "----------Apres tri----------" << endl;
   for (i = 0; i < (int)tab.size(); i++)
      cout << tab[i].toStringL() << endl;
   return 0;
}

Et le résultat obtenu avant l'erreur:
Code:
32 GAR MWA 41 602
32 GAR MWA 31 602
8 LCP NVS 31 401
16 AIN MWI 6 601
128 WAN CIH 33 504
32 AIN MWI 11 601
16 SYS JCJ 11 503
1 ANL JDM 16 403
56 CPP NVS 5 3
128 BDN CUV 19 403
64 AIN MWI 15 601
32 GAR MWA 41 602
32 GAR MWA 31 602
8 LCP NVS 31 401
16 AIN MWI 6 601
128 WAN CIH 33 504
32 AIN MWI 11 601
16 SYS JCJ 11 503
1 ANL JDM 16 403
56 CPP NVS 5 3
128 BDN CUV 19 403
32 GAR MWA 41 602
32 GAR MWA 31 602
8 LCP NVS 31 401
16 AIN MWI 6 601
128 WAN CIH 33 504
32 GAR MWA 41 602
32 GAR MWA 31 602
8 LCP NVS 31 401
16 AIN MWI 6 601
128 WAN CIH 33 504
32 GAR MWA 41 602
32 GAR MWA 31 602
8 LCP NVS 31 401
16 AIN MWI 6 601
128 WAN CIH 33 504
32 AIN MWI 11 601
32 GAR MWA 41 602
32 GAR MWA 31 602
32 GAR MWA 41 602
32 GAR MWA 31 602
8 LCP NVS 31 401
16 AIN MWI 6 601
128 WAN CIH 33 504
32 GAR MWA 41 602
32 GAR MWA 31 602
8 LCP NVS 31 401
16 AIN MWI 6 601
128 WAN CIH 33 504
32 AIN MWI 11 601
16 SYS JCJ 11 503
1 ANL JDM 16 403
56 CPP NVS 5 3
32 GAR MWA 41 602
32 GAR MWA 31 602
8 LCP NVS 31 401
16 AIN MWI 6 601
128 WAN CIH 33 504
32 AIN MWI 11 601
16 SYS JCJ 11 503
32 GAR MWA 41 602
32 GAR MWA 31 602
8 LCP NVS 31 401
16 AIN MWI 6 601
32 GAR MWA 41 602
32 GAR MWA 31 602
32 GAR MWA 41 602
32 GAR MWA 31 602
8 LCP NVS 31 401
16 AIN MWI 6 601
128 WAN CIH 33 504
32 GAR MWA 41 602
32 GAR MWA 31 602
8 LCP NVS 31 401
16 AIN MWI 6 601
32 GAR MWA 41 602
32 GAR MWA 31 602
8 LCP NVS 31 401
16 AIN MWI 6 601
128 WAN CIH 33 504
32 AIN MWI 11 601
16 SYS JCJ 11 503
32 GAR MWA 41 602
32 GAR MWA 31 602
32 GAR MWA 41 602
32 GAR MWA 31 602
8 LCP NVS 31 401
16 AIN MWI 6 601
128 WAN CIH 33 504
32 AIN MWI 11 601
16 SYS JCJ 11 503
1 ANL JDM 16 403
56 CPP NVS 5 3
128 BDN CUV 19 403
64 AIN MWI 15 601
2 SYS JCJ 40 503
32 LCP NVS 34 403
32 GAR MWA 41 602
32 GAR MWA 31 602
8 LCP NVS 31 401
32 GAR MWA 41 602
32 GAR MWA 31 602
8 LCP NVS 31 401
16 AIN MWI 6 601
128 WAN CIH 33 504
32 AIN MWI 11 601
16 SYS JCJ 11 503
1 ANL JDM 16 403
56 CPP NVS 5 3
128 BDN CUV 19 403
64 AIN MWI 15 601
2 SYS JCJ 40 503
32 GAR MWA 41 602
32 GAR MWA 31 602
8 LCP NVS 31 401
16 AIN MWI 6 601
128 WAN CIH 33 504
32 AIN MWI 11 601
32 GAR MWA 41 602
32 GAR MWA 31 602
8 LCP NVS 31 401
16 AIN MWI 6 601
128 WAN CIH 33 504
32 AIN MWI 11 601
32 GAR MWA 41 602
32 GAR MWA 31 602
8 LCP NVS 31 401
32 GAR MWA 41 602
32 GAR MWA 31 602
8 LCP NVS 31 401
16 AIN MWI 6 601
128 WAN CIH 33 504
32 AIN MWI 11 601
16 SYS JCJ 11 503
1 ANL JDM 16 403
56 CPP NVS 5 3
128 BDN CUV 19 403
64 AIN MWI 15 601
2 SYS JCJ 40 503
32 LCP NVS 34 403
32 GAR MWA 41 602
32 GAR MWA 31 602
8 LCP NVS 31 401
16 AIN MWI 6 601
128 WAN CIH 33 504
32 AIN MWI 11 601
32 GAR MWA 41 602
32 GAR MWA 31 602
8 LCP NVS 31 401
16 AIN MWI 6 601
128 WAN CIH 33 504
32 AIN MWI 11 601
16 SYS JCJ 11 503
32 GAR MWA 41 602
32 GAR MWA 31 602
8 LCP NVS 31 401
16 AIN MWI 6 601
128 WAN CIH 33 504
32 AIN MWI 11 601
16 SYS JCJ 11 503
1 ANL JDM 16 403
56 CPP NVS 5 3
128 BDN CUV 19 403
64 AIN MWI 15 601
2 SYS JCJ 40 503
32 GAR MWA 41 602
32 GAR MWA 31 602
8 LCP NVS 31 401
16 AIN MWI 6 601
32 GAR MWA 41 602
32 GAR MWA 31 602
8 LCP NVS 31 401
16 AIN MWI 6 601
128 WAN CIH 33 504
32 AIN MWI 11 601
16 SYS JCJ 11 503
1 ANL JDM 16 403
32 GAR MWA 41 602
32 GAR MWA 31 602
8 LCP NVS 31 401
16 AIN MWI 6 601
128 WAN CIH 33 504
32 AIN MWI 11 601
16 SYS JCJ 11 503
1 ANL JDM 16 403
56 CPP NVS 5 3
128 BDN CUV 19 403
64 AIN MWI 15 601
2 SYS JCJ 40 503
32 LCP NVS 34 403
1 LCO EFO 28 401
!!!32 GAR MWA 41 602
!!!0  0 0

Hana

Nombre de messages : 40
Prénom : Quynh Anh
Date d'inscription : 29/03/2011

Revenir en haut Aller en bas

Re: [LCP2]Alternative à qsort

Message  nvs le Lun 02 Jan 2012, 09:29

Hana a écrit:Apprès debugging j'ai trouvé que l'erreur se lance lorsqu'on essaie de comparer le dernier élément de mon vecteur (tab.end() qui contient des données tout à fait anormales) avec un autre. [...]
tab.end() n'est pas un itérateur sur le dernier élément du vector, mais sur un « élément inexistant » juste après le dernier. les données tout à fait anormales en tab.end() sont donc tout à fait normales.

ton appel de sort est correct. en c++, les domaines sont donnés par des intervalles semi-ouverts : [début, fin[ ou [début, fin). sort ne va donc jamais aller voir ce qui se passe en tab.end(). ton problème doit dès lors venir de l'operator< utilisé par sort.








What a Face

_________________

nvs

Nombre de messages : 5238
Age : 44
Prénom : Nicolas
Statut : prof
Localisation : bxl
Date d'inscription : 24/11/2005

http://nvansteenkiste.googlepages.com

Revenir en haut Aller en bas

Re: [LCP2]Alternative à qsort

Message  maxime159753 le Ven 06 Jan 2012, 20:50

Bonjour j'ai utilisé la fonction sort et j'ai donc créé une méthode compare. Mais j'ai lu plus haut qu'il faut utilisé la surcharge de l'operateur< mais je ne voit pas trop ce qu'il faut mettre dedans. Si quelqu'un pourrais m'éclairer ?


Code:

bool compare ( const Journee & a, const Journee & b ) {
    return a.getMois() < b.getMois() ;
}

sort (conteneur.begin(), conteneur.end(), compare);

surcharge opérateur< :

Code:
bool operator< (const Journee & a) const {
 //que faire ici ?
}



maxime159753

Nombre de messages : 29
Prénom : Maxime
Date d'inscription : 22/09/2010

Revenir en haut Aller en bas

Re: [LCP2]Alternative à qsort

Message  smb le Ven 06 Jan 2012, 21:45

maxime159753 a écrit:Bonjour j'ai utilisé la fonction sort et j'ai donc créé une méthode compare.
Bien !
maxime159753 a écrit:Mais j'ai lu plus haut qu'il faut utilisé la surcharge de l'operateur< mais je ne voit pas trop ce qu'il faut mettre dedans. Si quelqu'un pourrais m'éclairer ?
Pourquoi, il faut ?

maxime159753 a écrit:
Code:

bool compare ( const Journee & a, const Journee & b ) {
    return a.getMois() < b.getMois() ;
}

sort (conteneur.begin(), conteneur.end(), compare);
Bien.
maxime159753 a écrit:
surcharge opérateur< :

Code:
bool operator< (const Journee & a) const {
 //que faire ici ?
}
Pas bien !

La surcharge peut se faire comme méthode membre, donc :
Code:
bool Journee::operator< (const Journee & a) const { // le code }

L'objet "à gauche" de l'opérateur < est (*this) et celui à droite a

Donc, tu dois faire plus ou moins la même chose que pour compare !

Mais avez-vous vu au cours la surcharge des opérateurs, sinon, ta première version avec compare est bien ?



smb

Nombre de messages : 1035
Age : 64
Prénom : Stéphan
Statut : Don de sang, don de vie!
Localisation : Spy
Date d'inscription : 23/01/2007

Revenir en haut Aller en bas

Re: [LCP2]Alternative à qsort

Message  maxime159753 le Ven 06 Jan 2012, 22:45

Merci Smile On a vu vaguement un exemple au cours.

maxime159753

Nombre de messages : 29
Prénom : Maxime
Date d'inscription : 22/09/2010

Revenir en haut Aller en bas

Re: [LCP2]Alternative à qsort

Message  maxime159753 le Sam 07 Jan 2012, 10:46

J'ai écrit la surcharge de l'opérateur< dans Journee.cpp voici le code :

Code:
bool Journee::operator< (const Journee & a) const {
   return this->mois < a.mois;
}

et j'obtiens maintenant une erreur d'exécution dans ma méthode compare dont voici le code :

Code:
bool compare ( const Journee & a, const Journee & b ) {
    return a.getMois() < b.getMois() ; //ERREUR COMPILATION ICI
}

Quelqu'un sait-il pourquoi ?

maxime159753

Nombre de messages : 29
Prénom : Maxime
Date d'inscription : 22/09/2010

Revenir en haut Aller en bas

Re: [LCP2]Alternative à qsort

Message  smb le Sam 07 Jan 2012, 10:51

Est-ce vraiment une erreur de compilation ou un message d'eclipse ?

Pour le savoir Maxime, supprime le répertoire "Debug" et reconstruis le projet.
Si un exécutable est produit il ne s'agissait pas d'une erreur de compilation.

[edit] Erreur de compilation ou d'exécution ? [/edit]

smb

Nombre de messages : 1035
Age : 64
Prénom : Stéphan
Statut : Don de sang, don de vie!
Localisation : Spy
Date d'inscription : 23/01/2007

Revenir en haut Aller en bas

Re: [LCP2]Alternative à qsort

Message  maxime159753 le Sam 07 Jan 2012, 11:30

J'ai fais comme vous avez dit et aucun exécutable n'est produit quand je reconstruit mon projet
voici le message d'erreur:

..\src\meteo.cpp:21:22: error: no matching function for call to 'Journee::getMois() const'

maxime159753

Nombre de messages : 29
Prénom : Maxime
Date d'inscription : 22/09/2010

Revenir en haut Aller en bas

Re: [LCP2]Alternative à qsort

Message  smb le Sam 07 Jan 2012, 11:37

maxime159753 a écrit:J'ai fais comme vous avez dit et aucun exécutable n'est produit quand je reconstruit mon projet
voici le message d'erreur:

..\src\meteo.cpp:21:22: error: no matching function for call to 'Journee::getMois() const'

Le message est clair pourtant !
Envoie-moi ton projet, j'y regarde.

smb

Nombre de messages : 1035
Age : 64
Prénom : Stéphan
Statut : Don de sang, don de vie!
Localisation : Spy
Date d'inscription : 23/01/2007

Revenir en haut Aller en bas

Re: [LCP2]Alternative à qsort

Message  maxime159753 le Sam 07 Jan 2012, 11:51

voila je vous l'ai envoyé sur votre adresse mail heb Smile Merci

maxime159753

Nombre de messages : 29
Prénom : Maxime
Date d'inscription : 22/09/2010

Revenir en haut Aller en bas

Re: [LCP2]Alternative à qsort

Message  smb le Sam 07 Jan 2012, 12:07

maxime159753 a écrit:voila je vous l'ai envoyé sur votre adresse mail heb Smile Merci

C'était bien ça ! Les méthodes utilisées par ton compare comme getMois() doivent être const !
Tu n'as pas mis const après cette méthode (dans le .h et .cpp).

.. mais comparer uniquement sur le mois ne suffit pas !

smb

Nombre de messages : 1035
Age : 64
Prénom : Stéphan
Statut : Don de sang, don de vie!
Localisation : Spy
Date d'inscription : 23/01/2007

Revenir en haut Aller en bas

Re: [LCP2]Alternative à qsort

Message  maxime159753 le Sam 07 Jan 2012, 13:00

merci beaucoup ça marche maintenant Smile Oui je dois également comparer sur le jour du mois.

maxime159753

Nombre de messages : 29
Prénom : Maxime
Date d'inscription : 22/09/2010

Revenir en haut Aller en bas

Re: [LCP2]Alternative à qsort

Message  Contenu sponsorisé Aujourd'hui à 01:06


Contenu sponsorisé


Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum