Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Un vector résultant du tri de plusieurs vector ?? [ Algorithme / Maths ] (WolfSpirit2a)

mardi 18 septembre 2007 à 23:28:22 | Un vector résultant du tri de plusieurs vector ??

WolfSpirit2a

Bonjour !  :)

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 ???

Merciiii d'avoir lu mon problème assez compliqué ... lol  ^^

mercredi 19 septembre 2007 à 01:16:12 | Re : Un vector résultant du tri de plusieurs vector ??

patatalo

Membre Club Administrateur CodeS-SourceS
salut,



si tu dérive tes 3 classes a partir d'une classe unique il devrait etre possible de faire un cast.
je suis pas sur, n'etant pas un expert en matière de c++

@++

mercredi 19 septembre 2007 à 01:36:04 | Re : Un vector résultant du tri de plusieurs vector ??

WolfSpirit2a

Je viens d'essayer en créant 3 classes :

npc()
et
bomb()

qui dérivent de la classe element()

Voici les sources :


ELEMENT.H

#ifndef ELEMENTS_H
#define ELEMENTS_H

#include <iostream>


class elements
{
public:
elements();
virtual ~elements();
int m_y;
protected:
private:
};



#endif // ELEMENTS_H

ELEMENTS.CPP

#include "elements.h"


elements::elements()
{
m_y = 0;
}

elements::~elements()
{

}

NPC.H

#ifndef NPC_H
#define NPC_H

#include "elements.h"


class npc : public elements
{
public:
npc();
virtual ~npc();
int m_y;
static bool estDerriere(npc *a, npc *b);
protected:
private:
};



#endif // NPC_H

NPC.CPP

#include "npc.h"


npc::npc()
{
m_y = rand()%600;
}

npc::~npc()
{

}


bool npc::estDerriere(npc *a, npc *b)
{
return a->m_y < b->m_y;
}

BOMB.H

#ifndef BOMB_H
#define BOMB_H

#include "elements.h"


class bomb : public elements
{
public:
bomb();
virtual ~bomb();
int m_y;
static bool estDerriere(bomb *a, bomb *b);
protected:
private:
};



#endif // BOMB_H

BOMB.CPP

#include "bomb.h"


bomb::bomb()
{
m_y = rand()%600;
}

bomb::~bomb()
{

}

bool bomb::estDerriere(bomb *a, bomb *b)
{
return a->m_y < b->m_y;
}


Dans le main, je fais :

    vector<npc *> m_npc;
    vector<bomb *> m_bomb;
    vector<elements *> m_elements;

    for(int i = 0; i < NB_NPC; i++)
    {
        npc *mnpc = new npc;
        m_npc.push_back(mnpc);
        cout << "NPC(" << i << ") Y : " << m_npc[i]->m_y << endl;
    }

    for(int i = 0; i < NB_BOMB; i++)
    {
        bomb *mbomb = new bomb;
        m_bomb.push_back(mbomb);
        cout << "BOMB(" << i << ") Y : " << m_bomb[i]->m_y << endl;
    }

    cout << endl << " --- ETAPE 1 : TRI DES NPC SEULEMENT --- " << endl;

    stable_sort(m_npc.begin(), m_npc.end(), npc::estDerriere);

    for(int i = 0; i < NB_NPC; i++)
    {
        cout << "NPC(" << i << ") Y : " << m_npc[i]->m_y << endl;
    }

    cout << endl << " --- ETAPE 2 : TRI DES BOMB SEULEMENT --- " << endl;

    stable_sort(m_bomb.begin(), m_bomb.end(), bomb::estDerriere);

    for(int i = 0; i < NB_BOMB; i++)
    {
        cout << "BOMB(" << i << ") Y : " << m_bomb[i]->m_y << endl;
    }

    m_elements.push_back(m_npc[0]);
    cout << endl << "adresse de m_npc[0] : " << m_npc[0] << endl;
    cout << "adresse de m_elements[0] : " << m_elements[0] << endl;
    cout << "resultat : " << m_elements[0]->m_y << endl;

    system("pause");

    for(int i = 0; i < NB_NPC; i++) delete m_npc[i];
    for(int i = 0; i < NB_BOMB; i++) delete m_bomb[i];

    return 0;


Après lancement du programme, j'obtient :

NPC(0) Y : 172
NPC(1) Y : 210
NPC(2) Y : 254
NPC(3) Y : 258
BOMB(0) Y : 145
BOMB(1) Y : 365
BOMB(2) Y : 143
BOMB(3) Y : 404

 --- ETAPE 1 : TRI DES NPC SEULEMENT ---
NPC(0) Y : 172
NPC(1) Y : 210
NPC(2) Y : 254
NPC(3) Y : 258

 --- ETAPE 2 : TRI DES BOMB SEULEMENT ---
BOMB(0) Y : 143
BOMB(1) Y : 145
BOMB(2) Y : 365
BOMB(3) Y : 404

adresse de m_npc[0] : 0x3d2528
adresse de m_elements[0] : 0x3d2528
resultat : 0
Appuyez sur une touche pour continuer...

Pourquoi mon résultat vaut-il 0 au lieu de valoir la valeure du Y de m_npc[0] ? Puisque m_elements[0] et m_npc[0] ont la même adresse, utiliser m_elements[0]->m_y revient à utiliser m_npc[0]->m_y non ??



mercredi 19 septembre 2007 à 03:25:01 | Re : Un vector résultant du tri de plusieurs vector ??

azamharir

salut
c'est normal que le resultat soit = à 0
car tes sous classes npc et bomb contiennent 2 membres m_y (celui de la classe mere et fille).
quand tu fait l'appel avec la classe mere (m_elements[0]->m_y). elle invoque son m_y qui est resté = à 0.
enleve le m_y des classe filles et ça va marcher




Cette discussion est classé dans : tableau, resultat, vector, vec, instances


Répondre à ce message

Sujets en rapport avec ce message

[C++ 7(.NET)]Création d'un vector ou tableau Object [ par sfouilloux ] bjr,comment créer un tableau d'objet ou un vecteur en c++ managé sous VS.NET 2003.Merci tableau multidimentionnel en C++ [ par paskouaouch ] Bonjour, je souhaiterais savoir s'il ya moyen de créer des tableau en C++ de dimention n (n= 3, 4, 5 ou plus...) sans utiliser double***** tab,vector tableau [ par ToToL ] Bonjour,j'ai un tableau créé de cette maniere :std::vector Pos;et a un moment j'ai besion d'en créé un autre qui doit etre une copie de Pos , quel es vector de tableau à deux élément : vector <int[2]> [ par Icarius44 ] Bonjours tout le mondealors je voudrais faire                 vector mais ca marche pas avec Visual C++.Connaisez vous en équivalent qui marche (autre Tri des membres d'une classe (std::vector ou std::list) [ par WolfSpirit2a ] Salut à tous ! je suis actuellement en train de programmer un petit jeu sans prétentions en C++/SDLMalheureusement je suis confronté à un problème sur STL vector et tableau [ par cybermax62 ] j'ai une petite question sur la classe template vector. je sais que c'est possible d'initiliser un vector avec un tableau point de vue C (char[]). j'a stocker le resultat d'une requete sql en c++ dans un tableau [ par mamstyle ] Bonsoir, je travaille en ce moment sur un projet et j'utilise la MFC sous Visual Studio .Mon but est d'aller dans la base de données et de recuperer l Vector de plusieurs types [ par nisaloncaje ] Bonjour, j'aimerais créer un tableau de type vector, mais que ce tableau puisse contenir plusieurs type d'objets mais qui héritent tous d'une meme cla Création dynamique d'un tableau d'ojbets VCL (Borland) [ par tibob51 ] Bonsoir,Je voudrai savoir si il est possible (et comment) de créer un tableau d'objets VCL.Les constructeur des classes des objet n'ayant pas de valeu declarer un tableau de taille variable [ par Seb33300 ] Bonjourcomment déaclarer un tableau avec un taille déclaré dans une variable ?taille = 10;tableau[taille]; ne marche pasmerci


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,296 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.