trie tableau vector... (very debutant) help me please - C++ - Programmation
Marsh Posté le 23-03-2005 à 00:19:19
Pour commencer je stockerai tout ça dans un vector.
Code :
|
Pour trier, il te faut un operator< dans ta classe Client. Je te conseille de faire comme ceci:
Code :
|
J'ai défini deux operator<, mais tu aurais pu en ajouter un uniquement pour la classe Client:
Code :
|
Une fois que tous tes clients ont été ajoutés, tu utilises la fonction std::sort dans l'entête <algorithms>
Code :
|
Elle va automatiquement utiliser l'operator< pour trier tes clients en fonction de leur nom.
Si après tu veux trier ta liste en fonction d'autres paramètres, il faudra que tu donnes un 3ème paramètre à la fonction sort, qui s'appelle un foncteur.
Si tu veux retourner une structure, deux solutions:
Code :
|
ou bien en utilisant une référence:
Code :
|
Marsh Posté le 23-03-2005 à 00:44:57
Je viens de penser à ça, si jamais tu as deux clients avec le même nom, tu peux modifier ton operator< comme ceci:
Code :
|
Marsh Posté le 23-03-2005 à 07:25:07
salut merci beaucoup pour ton aide, mais le probleme c'est que ca compile nickel mais quand j'execute et que j'affiche ca ne change pas...
Code :
|
voila mon code donc le probléme c'est que quand j'affiche mon tableau il n'y a rien qui a changé
Marsh Posté le 23-03-2005 à 12:35:00
Déjà je pense qu'il est préférable de ne pas utiliser la directive
Code :
|
, et préfixer tes vector, tes string... avec std::
Sinon pour la fonction std::sort, je pense que c'est parce que tu dois transmettre une référence du vector à la fonction TrierClients. Là la fonction travaille sur une copie.
Tu devrais faire comme ça je pense:
Code :
|
Et donc du coup tu as ceci:
Code :
|
Pourquoi trier ta liste entre deux appels à Affiche?
Une fois que tous tes clients ont été enregistrés dans le vecteur, tu tries ton vecteur une seule fois, et ensuite tu cherches dans ton vecteur...
Sinon pour ta fonction Affiche, je pense qu'il serait préférable une fois encore d'utiliser un operateur et une fonction de la STL, ainsi que les iterateurs...
Tout d'abord la classes, avec l'operator==
Code :
|
Et ta fonction Affiche:
Code :
|
Là tu as défini l'operator== en fonction d'un std::string, et qui te renvoie true si le nom est identique. Problème, si tu veux faire une recherche sur le prénom, qui est aussi un std::string, tu ne peux pas surcharger operator==. Ce pourquoi je te conseille de te tourner vers des foncteurs qui te permettront tous les tris et toutes les recherches que tu veux...
Bon courage
Edit:
Si tu veux afficher tous tes clients d'un coup et vérifier qu'ils sont bien dans l'ordre alphabétique:
Code :
|
Marsh Posté le 23-03-2005 à 13:44:55
aaaaaaaaaaarrrrrggg j'en ai trop marre !!!
maintenant mon compilo me marque plei d'erreur...
le log:
Code :
|
il me renvoi toujours a la ligne suivante:
Code :
|
Marsh Posté le 23-03-2005 à 14:00:03
si je vire la fonction affiche j'ai deja beaucoup moin d'erreur mais il me ramene toujours a la meme ligne:
log compilo:
Code :
|
Marsh Posté le 23-03-2005 à 14:20:20
((const Client*)this)->Client::id
euh t'essaies de faire quoi là ?
Marsh Posté le 23-03-2005 à 14:59:49
c'est ce que mon compilateur m'ecrit comme erreur alors que je n'est pas du tout écrit ça
Marsh Posté le 23-03-2005 à 17:06:15
c'est encore moi désolé de faire chier mais je suis perdu...
Alors pour l'instant je vais laissé tommber ma fonction de trie car là c'est vraimment la merde...
Et maintenant j'ai un autre probléme avec une autre fonction.
en fait je doit rechercher un client (le nom et passé en paramétre) et la fonction doit retourné son indice dans le tableau sinon -1 (si le client n'existe pas)
alors voila ce que j'ai fais cela compile bien mais lors de l'execution j'ai un bug lorsque j'entre le nom recherché et que j'execute quelqu'un peut-il me dire pourquoi svp ?
prototype de ma fonction:
Code :
|
dans le main:
Code :
|
definition de la fonction:
Code :
|
pour info la fonction affiche:
Code :
|
voila, je ne vois vraiment pas pourquoi cela bug
Marsh Posté le 23-03-2005 à 17:18:05
c'est bon pour la fonction de recherhce !
j'ai simplement raouté un break; juste apres indice = i;
par contre si quelqu'un peut m'aider pour ma fonction de trie ce serai vachement cool car là ça fais 2 semaine que je n'arrive pas a faire cette fonction.
Pourtant elle doit simplement rangé le tableau dans l'ordre alphabétique rien de plus...
en tout cas merci beaucoup a ceux qui mon déja aidé
Marsh Posté le 23-03-2005 à 19:37:42
J'ai les surcharge d'operateur suivant:
Code :
|
j'ai donc ecrit une fonction pour telecharger le fichier et copier son contenu dans un tableau:
Code:
Code :
|
et là il me faut une fonction pour enregistrer les donnés du tableau dans le fichier comment puis je faire svp ?
voila ce que j'ai fais mais ça ne fonctionne pas:
Code:
Code :
|
Marsh Posté le 23-03-2005 à 19:54:30
Taz a écrit : sort(v.begin(), v.end()); |
j'ai deja essayé mais cela me mais une erreur dans le fichier d'en-tete stl_algo.h
Marsh Posté le 23-03-2005 à 20:23:38
la fonction enregistrer c'est bon je viens de resoudre le probleme.
Il me reste plus qu'a revenir sur cette satané fonction de trie, je comprend vraimment pas pourquoi elle ne fonctionne pas...
Marsh Posté le 23-03-2005 à 20:53:56
ostream& operator << (ostream& flux, Date & D)
est incorrect
Marsh Posté le 23-03-2005 à 21:08:36
oui c'est bon j'ai meme reussi a finir la fonction trie
merci a tous pour votre aide
Marsh Posté le 24-03-2005 à 08:42:21
moi aussi ça m'interresse on peu avoir le code en entier??
merci
Marsh Posté le 22-03-2005 à 19:24:59
hello all
j'ai un gros probléme que je n'arrive pas a résoudre pouvez vous m'aidez svp ?
voila mon probleme:
je doit trier un tableau de vector en respectant l'ordre alphabetique
voila mes structure:
le trie doit se faire par le nom exemple:
Client tableau;
tableau[0].id.nom;
trop besoin d'aide svp
Message édité par boby61 le 23-03-2005 à 17:08:39