STL utilisation de merge() pour des listes [resolu]

STL utilisation de merge() pour des listes [resolu] - C++ - Programmation

Marsh Posté le 20-06-2006 à 09:54:51    

Bonjour, bon j'ai un petit problème avec la méthode merge() : déjà je vois pas trop ce qu'elle fait... en effet j'ai vu qu'elle est sencé trier la liste courante et ensuite elle rajoute les éléments de la liste passée en argument en les intercalants...
mas voilà j'ai essayé ça :

Code :
  1. #include <iostream>
  2. #include <list>
  3. int main(int argc, char *argv)
  4. {
  5. std::list<int> liste1;
  6. liste1.push_front(20);
  7. liste1.push_front(10);
  8. liste1.push_front(30);
  9. liste1.push_front(5);
  10. std::list<int> liste2;
  11. liste2.push_front(15);
  12. liste2.push_front(25);
  13. liste2.push_front(7);
  14. liste2.push_front(17);
  15. liste1.merge(liste2);
  16. std::list<int>::iterator itera;
  17. for(itera = liste1.begin() ; itera != liste1.end() ; itera++)
  18.     std::cout<<*itera<<" ";
  19. std::cout<<std::endl;
  20. return 0;
  21. }


et là à la sortie il me sort : 5 17 7 25 15 30 10 20
hum ils sont pas vraiment triés...  
(je sais que si je fait sort() ils vont l'être mais ils n'étaient pas sencé l'être avant ?)
 
ensuite ma deuxième question est que la methode merge est surchargée et que c'est aussi :

Code :
  1. template <class Compare>
  2. void merge(list<T> & x, Compare comp);


 
je vois pas trop comment on utilise ça... j'avais essayé ça :

Code :
  1. class comparaison
  2. {
  3.     public:
  4.     bool operator()(int a, int b)
  5.     {
  6.         return (a>b);
  7.     }
  8. };
  9. liste1.merge(liste2, comparaison());


mais ça marche pas...
donc voilà si vous pouvez m'aider ça serait sympa... :)

Message cité 1 fois
Message édité par Amonchakai le 20-06-2006 à 10:59:35
Reply

Marsh Posté le 20-06-2006 à 09:54:51   

Reply

Marsh Posté le 20-06-2006 à 10:04:29    

Amonchakai a écrit :

j'ai vu qu'elle est sencé trier la liste courante et ensuite elle rajoute les éléments de la liste passée en argument en les intercalants... (...) (je sais que si je fait sort() ils vont l'être mais ils n'étaient pas sencé l'être avant ?)


 
source ?
 
ici, c'est écrit que les éléments doivent être triés avant le merge - pas qu'elles seront triées après le merge:
http://www.sgi.com/tech/stl/List.html

Reply

Marsh Posté le 20-06-2006 à 10:12:15    

ha bon...  
bon pour ma source c'est un fichier .pdf que j'ai enregistré donc...
mais en même temp j'ai vu sur MSDN ça : http://msdn2.microsoft.com/en-us/library/ec0yw4kc.aspx
ils disent pas que merge() trie la liste (c'est peut-être mon anglais qui est pas très bon...)
par contre je suis d'accord avec toi que vu le liens que tu m'a donné ils disent que les deux listes doivent être triées...

Reply

Marsh Posté le 20-06-2006 à 10:28:28    

j'ai retrouvé la source !!!
voilà c'est là que je l'ai trouvé : http://www.chez.com/brunogarcia/


Message édité par Amonchakai le 20-06-2006 à 10:48:37
Reply

Marsh Posté le 20-06-2006 à 10:34:25    

si tu veux de l'aide, tu nous donne un code concis et compilable. Pas des liens. Sinon t'écris à brunogarcia et ça sera sans nous.

Reply

Marsh Posté le 20-06-2006 à 10:59:04    

Ok, désolé...
 
mais c'est bon j'ai fini par trouver.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed