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

  FORUM HardWare.fr
  Programmation
  C++

  Tri d'objet pointé dans un tableau

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Tri d'objet pointé dans un tableau

n°2018669
NathanGe
Posté le 24-08-2010 à 13:13:14  profilanswer
 

Bonjour,
 
Dans le cadre de mon travail de programmation, je souhaiterais réaliser le tri des éléments d'un tableau contenant des adresses d'éléments de grande taille (afin d'alléger le travail et d'accélérer le code, je préfère conserver les adresses des éléments et non les éléments eux-mêmes).
 
Au final, le code bute sur l'écriture de l'opérateur de comparaison entre éléments :
 

Code :
  1. bool operator<(MaClasse* a,MaClasse* b)
  2. {
  3. //
  4. // Ma méthode de comparaison
  5. //
  6. }


 
Ainsi, le compilateur renvoie le message pour ces lignes :
 

Code :
  1. error C2803: 'operator <' doit avoir au moins un paramètre de type classe


 
L'algorithme de tri a été défini séparément et fonctionne tout à fait correctement sur des éléments non pointés (ie opérateur bool operator<(MaClasse a,MaClasse b) plutot que bool operator<(MaClasse* a,MaClasse* b)).
 
Est-ce que certains d'entre-vous sauraient d'où vient le problème et comment le corriger ?
Est-ce qu'il est possible, en C++, d'introduire des opérateurs de comparaison pour des opérations de tri, qui portent sur des pointeurs d'éléments et non les éléments eux-mêmes ?
 
En vous remerciant d'avance de votre aide
 
 

mood
Publicité
Posté le 24-08-2010 à 13:13:14  profilanswer
 

n°2018682
Un Program​meur
Posté le 24-08-2010 à 13:35:08  profilanswer
 

Les operateurs doivent avoir au moins un argument qui est d'un type defini par l'utilisateur (classe ou enum, les pointeurs n'en sont pas).
 
Les fonctions de tris de la bibliotheque standard prennent un foncteur en argument, donc tu peux passer ce que tu veux (fonction libre ou bien instance d'une classe ayant operator() comme membre).  Si tu ecris la fonction de tri toi-meme, je te suggere de faire de meme.  La bibliotheque standard a std::less<> qui permet de transformer l'operateur< en foncteur.


---------------
The truth is rarely pure and never simple (Oscar Wilde)
n°2019375
Taz
bisounours-codeur
Posté le 27-08-2010 à 14:46:27  profilanswer
 

Il faut que tu utilises le 3ème argument de std::sort.
 
Exemple complet:

Code :
  1. #include <iostream>
  2. struct MaClasse
  3. {
  4.   int i;
  5. public:
  6.   MaClasse(int j) : i(j) {}
  7.   int value() const { return this->i; }
  8. };
  9. bool operator<(const MaClasse &a, const MaClasse &b)
  10. {
  11.   return a.value() < b.value();
  12. }
  13. std::ostream & operator<<(std::ostream &out, const MaClasse &a)
  14. {
  15.   return out << a.value();
  16. }
  17. #include <iostream>
  18. #include <iterator>
  19. #include <algorithm>
  20. #include <functional>
  21. #include <vector>
  22. template<typename T>
  23. struct PointerComparator
  24.   : public std::binary_function<bool, const T*, const T*>
  25. {
  26.   bool operator()(const T* a, const T* b)
  27.   {
  28.     return *a < *b;
  29.   }
  30. };
  31. int main()
  32. {
  33.   std::vector<MaClasse*> array;
  34.   int value;
  35.   while (std::cin >> value) {
  36.     array.push_back(new MaClasse(value));
  37.   }
  38.   for (size_t i = 0; i < array.size(); ++i) {
  39.     std::cout << *array[i] << ", ";
  40.   }
  41.   std::cout << "\n";
  42.   std::sort(array.begin(), array.end(), PointerComparator<MaClasse>());
  43.   for (size_t i = 0; i < array.size(); ++i) {
  44.     std::cout << *array[i] << ", ";
  45.   }
  46.   std::cout << "\n";
  47. }


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

  Tri d'objet pointé dans un tableau

 

Sujets relatifs
macro excel - créer un tableau récapitulant les liaisons de la feuilleCréer une table dans Access à partir d'un tableau
Alimenter une plage grace à une variable tableauErreur d'exécution Microsoft VBScript: Cet objet ne gère pas cette pro
Tableau croisé dynamique VBATemplates et tableau générique
acceder à une propriété d'un objet par l'intermédiaire d'un string[RESOLU]Stocker le résultat d'une requête dans un tableau
Macro pour copier un tableau de tableau variable vers Word Allocation dynamique d'un tableau f90
Plus de sujets relatifs à : Tri d'objet pointé dans un tableau


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