Salut, j'ai un problème avec la méthode sort d'une std::list pour les entiers.
Je m'explique:
J'ai un tableau qui récapitule les infos (Nom, Forme, Température, ..) d'une liste de composants électriques (cables, fusibles, etc...). Lorsque je clique sur une colonne, je voudrais que les éléments de mon tableau s'ordonnent en fonction de la colonne cliquée (un peu à la façon de l'explorateur windows par exemple).
Pour faire cela, je récupère d'abord tous les composants électriques (de type CElectricalElement*) dans une std::list. Ces objets étant assez lourds et pour pouvoir les ordonner plus facilement, j'ai recréé une classe spécialement pour cette opération:
L'objet TabAdapter est donc (presque) juste un CElectricalElement avec l'opérateur < redéfini. On rempli une nouvelle liste avec ces TabAdapter.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 class TabAdapter { public: TabAdapter() {ptr = 0;} TabAdapter(CElectricalElement * p, wxString& selected_column_name, bool display_from_lowest_to_biggest) { ptr = p; mSelectedColumnName = selected_column_name; mDisplayFromLowestToBiggest = display_from_lowest_to_biggest; } CElectricalElement * getPtr() {return ptr;} void setPtr(CElectricalElement * p) {ptr = p;} //bool operator < (TabAdapter & other) {return (this->getPtr()->getName() < other.getPtr()->getName());} bool operator < (TabAdapter & other); private: CElectricalElement * ptr; wxString mSelectedColumnName; bool mDisplayFromLowestToBiggest; };
Lorsqu'on appelle la méthode sort() de cette nouvelle liste, il sort une liste classée en fonction de ma fonction bool operator < (TabAdapter & other);
Jusqu'ici tout va bien, j'ai déjà réussi à classer ma liste en fonction du nom ou du type de composant. Seulement dès que je compare le numéro des composants (un double), le programme compile mais crash.
La méthode redéfinissant l'opérateur < est comme ceci:
mSelectedColumnName : nom de la colonne cliquée
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 bool TabAdapter::operator < (TabAdapter & other) { if (mSelectedColumnName == wxT("Name")) if (mDisplayFromLowestToBiggest == true) return (this->getPtr()->getName() < other.getPtr()->getName()); else return (other.getPtr()->getName() < this->getPtr()->getName()); else if (mSelectedColumnName == wxT("Length")) if (mDisplayFromLowestToBiggest == true) return (this->getPtr()->getLength() < other.getPtr()->getLength()); else return (other.getPtr()->getLength() < this->getPtr()->getLength()); }
mDisplayFromLowestToBiggest : sens d'ordonnancement
Je ne comprend pas pourquoi il n'arrive pas à comparer ces fouttus doubles :/ j'ai aussi essayé de les passer en string mais ça ne marche toujours pas..
J'aimerais éviter de devoir rechanger toute ma structure mais si c'est la seule solution alors tant pis :'(
Merci![]()
Partager