Salut,
Voila j'ai une certaine classe abstraite Geom (dont ca classe fille Point) qui surcharge l'operateur < donc on peut comparer deux Point entre eux sans souci j'ai testé ca marche au top.
Code :
- /* Methode pour la surcharge de l'operateur < */
- bool Point::operator<(Geom &g)
- {
- /* On tente de caster en Point * pour pouvoir comparer deux points*/
- Point *p = dynamic_cast<Point *>(&g);
- /* Si le cast a echoué c'est qu'on essaie de comparer
- deux objets incomparables */
- if (p == NULL){
- throw Mauvaise_Comparaison("Point avec inconnu" );
- }
- /* Si le cast reussi on effectue la comparaison selon le critere
- de comparaison entre deux points */
- return ((x < p->x) || ((x == p->x) && (y < p->y)));
- }
|
Mon but est de trier un vector de pointeurs sur Geom ...
Dans le main :
Code :
- // Définition du foncteur servant à trier nos objets selon leur critere
- struct MySort
- {
- bool operator ()(Geom *a1, Geom *a2) const
- {
- return a1 < a2;
- }
- };
- int main(int argc, char *argv[])
- {
- try{
- //Declaration du vecteur
- vector<Geom *> vector1(0);
- //Remplissage du vecteur
- vector1.push_back(new Point_l(2,2,150));
- vector1.push_back(new Point_c(1,1,"rouge" ));
- vector1.push_back(new Point(5,5));
- vector1.push_back(new Point_c(3,3,"vert" ));
- //Tri du vecteur
- sort(vector1.begin(), vector1.end(), MySort());
- cout << "Contenu du vecteur trie : " << endl;
- for(int i = 0; i < vector1.size() ; i++){
- if (vector1[i] != NULL)
- cout << *(vector1[i]) << endl;
- }
-
- }
- catch(exception &e)
- {
- cerr << e.what() << endl;
- }
- system("PAUSE" );
- return EXIT_SUCCESS;
- }
|
Mais voila il trie rien du tout ou au mieux il en trie que les 2 premiers
Je pige pas trop d'ou ca peut venir ...
Message édité par Chronoklazm le 22-10-2005 à 01:21:31
---------------
Scheme is a programmable programming language ! I heard it through the grapevine !