Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2807 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  qsort trie en Cpp

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

qsort trie en Cpp

n°1901717
Glock 17Pr​o
Posté le 02-07-2009 à 18:29:35  profilanswer
 

salut,
 
j'ai besoin de faire un tri multi critère en C++.
 
Quel est l'équivalent du qsort en C++ ?
sort, prend une fonction de type Compare et donc qui return un boolean.
 
le prototype pour qsort est une fonction qui renvoie un int...
 
Du coup je ne vois pas quoi utiliser. Boost banned.
 
Merci

mood
Publicité
Posté le 02-07-2009 à 18:29:35  profilanswer
 

n°1901719
Joel F
Real men use unique_ptr
Posté le 02-07-2009 à 18:54:17  profilanswer
 

std::sort avec un foncteur qui va bien ... Je vois pas ou est le probleme

n°1901723
Glock 17Pr​o
Posté le 02-07-2009 à 19:17:45  profilanswer
 

ça peut être une surcharge de l'operator () qui renvoie un int ? pas uniquement un bool ?

n°1901726
Joel F
Real men use unique_ptr
Posté le 02-07-2009 à 19:22:14  profilanswer
 

euh qsort renvoie un int qui vaut 0 ou 1 car bool n'existe aps en C90  c'est tout ... Un opérateur de comparaison , sémantiquement, ne peut pas renvoyer autre chose ...

n°1901738
Glock 17Pr​o
Posté le 02-07-2009 à 19:54:33  profilanswer
 

hum ah bon, pas sûr du tout, j'ai vue des algo sur le net vite fait, où les mecs renvoyés des valeurs autre que 1 ou 0 dans leur fonction compare

 

genre là :
http://www.codermind.fr/reponses/C [...] teres.html


Message édité par Glock 17Pro le 02-07-2009 à 20:16:06
n°1901768
Un Program​meur
Posté le 02-07-2009 à 20:59:35  profilanswer
 

Le comparateur attendu par qsort, c'est du 3 voies -- comme strcmp --, plus petit que 0, égal à 0, plus grand que 0.
 
Le comparateur attendu par std::sort, c'est du deux voies.  Si on veut le fabriquer à partir d'un comparateur conçu pour qsort, il faut faire cmp() < 0.


---------------
The truth is rarely pure and never simple (Oscar Wilde)
n°1901775
Glock 17Pr​o
Posté le 02-07-2009 à 21:24:10  profilanswer
 

c'est à dire cmp()<0 ?

n°1901776
Glock 17Pr​o
Posté le 02-07-2009 à 21:30:43  profilanswer
 

plutot,  si j'ai une struct{int,string,string,string} un comparateur deux voies ça suffit pour me trier ça ?


Message édité par Glock 17Pro le 02-07-2009 à 21:30:54
n°1901780
Joel F
Real men use unique_ptr
Posté le 02-07-2009 à 21:44:35  profilanswer
 

le nombre de voie n'a pas de rapport. Il faut juste que ton oeprator< soit complet pour ton type c'ets tout.

n°1901783
Glock 17Pr​o
Posté le 02-07-2009 à 21:52:30  profilanswer
 

ça m'embrouille tout ça, jss dans le brouilalrd


Message édité par Glock 17Pro le 02-07-2009 à 21:52:37
mood
Publicité
Posté le 02-07-2009 à 21:52:30  profilanswer
 

n°1901785
Joel F
Real men use unique_ptr
Posté le 02-07-2009 à 21:53:53  profilanswer
 

théorie du tri quoi. Tu peut trier des objets ssi il existe un ordre complet dessus. Donc à toi de trouvé comment à partir des données de ta structure quel calcul mener pr ordonnée 2 instances quelconque. Ton operateur n'a plus alors qu'a renvoyé vrai ou faux.

n°1901790
Glock 17Pr​o
Posté le 02-07-2009 à 22:10:59  profilanswer
 

ben j'aimais assez la solution du lien que j'ai posté, c'était facile quoi, je pense que je vais rester sur le qsort

n°1901848
Joel F
Real men use unique_ptr
Posté le 03-07-2009 à 08:12:25  profilanswer
 

c'est exactement ce que je disais ...
L'algo mis en lien, il s'ecrit pareil avec sort hein :o

n°1901864
Un Program​meur
Posté le 03-07-2009 à 09:39:58  profilanswer
 

cmp() est le comparateur a trois voies que tu as deja.

 

Essayer de programmer en combinant des bouts de code trouves a l'aide de google correspondant a des problemes plus ou moins similaires au tien et en les adaptant en les modifiant au hasard d'apres les reponses a une question mal posee sur des web forums, ca ne va pas d'amener tellement loin.

 

Il faut comprendre comment ca marche.


Message édité par Un Programmeur le 03-07-2009 à 09:40:33

---------------
The truth is rarely pure and never simple (Oscar Wilde)
n°1901983
Glock 17Pr​o
Posté le 03-07-2009 à 12:13:55  profilanswer
 

ça m'amène une autre question :
- ov est un vector,CompareFunc une focntion membre de Parse
- sort est appelé dans une fonction memebre de Parse
- CompareFunc est du modèle de la fonction cmp dont on parlé plus haut
sa signature est
int Parse::CompareFunc(const Obj& o1,const Obj& o2)
 
- ov contient des Obj
 

Code :
  1. sort(ov.begin(),ov.end(),std::bind1st(std::mem_fun_ref(&Parse::CompareFunc),this));


 
Le compilo me sort could not deduce argument for mem_fun_ref, je fais quelquechose de pas bien ?


Message édité par Glock 17Pro le 03-07-2009 à 12:15:07
n°1902009
Joel F
Real men use unique_ptr
Posté le 03-07-2009 à 13:43:37  profilanswer
 

*this peut etre ...

n°1902029
Glock 17Pr​o
Posté le 03-07-2009 à 14:24:29  profilanswer
 

:( nope même mess d'erreur

n°1902043
Un Program​meur
Posté le 03-07-2009 à 14:52:05  profilanswer
 

A nouveau, il faut comprendre ce qu'on fait et pas faire des choses au hasard.
 
Que fait  mem_fun_ref?  Transformer en un foncteur a deux parametres une fonction membre qui prend un parametre en plus de this.  Tu lui passes une fonction membre a deux parametres, ca rale.
 
Que fait bind1st?  Transformer en un foncteur a un parametre un foncteur a deux parametre en fixant le premier.
 
Autrement dit, la combinaison des deux n'est pas ce que tu veux.  Il n'y a rien de standard qui fasse ce que tu veux, tu vas devoir faire un wrapper toi-meme.
 
En passant, il faut aussi adapter le resultat de la fonction membre.  Tu vas pouvoir passer un foncteur retournant un int, mais avec egalite a 0 implicite, pas l'inegalite que tu veux vraisemblablement.


---------------
The truth is rarely pure and never simple (Oscar Wilde)
n°1902045
Glock 17Pr​o
Posté le 03-07-2009 à 14:57:33  profilanswer
 

ok merci. toujours là quand on a besoin :^, bon je vais rester sur une fonction non membre , ça fait pas trés encapsulation fashion mais au moins ça marche et c'est simple


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  qsort trie en Cpp

 

Sujets relatifs
Trie tableau dans un autre tableau[SQL]trié plusieur count dans une requete union
Trie sur fichiersModif de l'example Dev CPP : aide et explications
Trie sur date mais sans tenir compte de l'annéetrie par rapport a A1
Creation module [archives] trie par annees / moismethodes de trie des vecteurs (complexité...)
VB6 : Trie de colonne avec requete SQLProgramme pour trie sur Excel...HELP!!!
Plus de sujets relatifs à : qsort trie en Cpp


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)