Partage
  • Partager sur Facebook
  • Partager sur Twitter

Un vector résultant du tri de plusieurs vector ??

C'est possible ??

    18 septembre 2007 à 23:31:12

    Bonjour ! :D

    J'aimerai savoir si il est possible de trier plusieurs vector (qui auraient les mêmes membres) et de récupérer un tableau ou un autre vector qui contiendrai le "tri" de mes vector ?

    Par exemple, imaginons que j'ai trois classes :
    PointA(), PointB() et PointC()
    Chaque classe contient 2 entiers : X et Y et une fonction traitement();

    Imaginons maintenant que j'ai 2 instances de chaque classe dans des vector ... donc 3 vector de 2 instances.

    std::vector<PointA> vec_A : contient 2 instances de PointA()
    std::vector<PointB> vec_B : contient 2 instances de PointB()
    std::vector<PointC> vec_C : contient 2 instances de PointC()


    Comment faire pour récupérer un tableau ou un nouveau vector contenant les adresses des instances de mes 3 classes triées dans l'ordre de leur propriété Y ? Est-ce possible ??

    Par exemple, si j'ai :

    vec_A[0].y = 2
    vec_A[1].y = 6
    vec_B[0].y = 1
    vec_B[1].y = 5
    vec_C[0].y = 9
    vec_C[1].y = 7


    Je voudrais récupérer un tableau ou un vector qui contiendrai non pas les valeurs Y mais un pointeur vers chaque classe concernée, trié par Y croissant :

    vec_resultat[0] = &vec_B[0]
    vec_resultat[1] = &vec_A[0]
    vec_resultat[2] = &vec_B[1]
    vec_resultat[3] = &vec_A[1]
    vec_resultat[4] = &vec_C[1]
    vec_resultat[5] = &vec_C[0]


    pour pouvoir par la suite utiliser :
    for(int i = 0; i < 6; i++) vec_resultat[i]->traitement()
    par exemple !

    En faite ça me parait impossible car que vec_resultat soit un tableau ou un vector il faut déclarer son type ... hors là il est sencé contenir des adresses de plusieurs types différents ...

    Mais sinon ... c'est possible ??? :euh:

    Merciiii d'avoir lu mon problème assez compliqué ... lol ^^
    • Partager sur Facebook
    • Partager sur Twitter
      18 septembre 2007 à 23:36:09

      si PointA, pointB et pointC héritent toutes de la même classe mère (Point par exemple) :
      std::vector<Point*> vec_resultat;
      • Partager sur Facebook
      • Partager sur Twitter
        18 septembre 2007 à 23:46:57

        Merci pour ta réponse, mais je ne sais pas si l'héritage est adapté dans mon cas.
        En effet, mon problème s'aplique à un jeu (une sorte de bomberman).

        J'avais posté il n'y à pas longtemps sur ce forum une question sur le tri, que j'ai résolu grâce aux Zeros :p . En fait ma classe "game" qui gère le jeu inclue une classe "npc" qui affiche les personnages à l'écran. Tout marche bien grâce à vous, les npcs sont repeints bien dans l'ordre (le premier repeint est celui qui a la coordonnée Y la plus petite et le dernier la coordonnée Y la plus grande), ils sont triés par un vecteur. Par contre, maintenant je viens d'implémenter une classe "bomb" qui va afficher et gérer les bombes à l'écran et même si elles sont triées elles aussi par un vector bah elles se repeignent toujours au dessus des npc (normal puisque la procédure de repeint est appelée APRES celle des npc ...).

        Donc il faudrait que mes class "npc" et "bomb" héritent de ma classe "game" ? Puis ne faire plus qu'un seul vector <Game*> pour gérer mes npc + mes bombes ? :euh:
        • Partager sur Facebook
        • Partager sur Twitter
          19 septembre 2007 à 15:44:27

          l'héritage (voir Polymorphisme ici) est très adapté à ton cas :

          Tu l'as dit elles ont tout les 3 une fonction traitement() et les mêmes membres.

          1. class Point_base
          2. {
          3.     int m_x;
          4.     int m_y;
          5. public:
          6.     // Mot clé virtual obligatoire ici
          7.     virtual void traitement();
          8. };
          9. class Point_specialise : public Point_base
          10. {
          11. public:
          12.     void traitement();
          13. };
          14. // dans main.cpp
          15. int main()
          16. {
          17.     vector<Point_base *> vPoints;
          18.     vPoints.push_back( new Point_base );
          19.     vPoints.push_back( new Point_specialise );
          20.     for( size_t i = 0; i < vPoints.size(); i++ )
          21.         vPoints[ i ]->traitement();  // grace au mot-clé virtual la bonne fonction sera appelée pour l'objet pointé au 2e index
          22.     for( size_t i = 0; i < vPoints.size(); i++ )
          23.     {
          24.         delete vPoints[ 0 ];
          25.     }
          26. }


          pour trier automatiquement il te faut une autre fonction qui va te permettre de le faire et peut-être même un foncteur pour être efficace.

          P.S. Tu devrais essayer de trouver des noms un peu plus évocateurs à tes classes.
          • Partager sur Facebook
          • Partager sur Twitter

          Un vector résultant du tri de plusieurs vector ??

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown