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 :
- #include <iostream>
- #include <list>
- int main(int argc, char *argv)
- {
- std::list<int> liste1;
- liste1.push_front(20);
- liste1.push_front(10);
- liste1.push_front(30);
- liste1.push_front(5);
- std::list<int> liste2;
- liste2.push_front(15);
- liste2.push_front(25);
- liste2.push_front(7);
- liste2.push_front(17);
- liste1.merge(liste2);
- std::list<int>::iterator itera;
- for(itera = liste1.begin() ; itera != liste1.end() ; itera++)
- std::cout<<*itera<<" ";
- std::cout<<std::endl;
- return 0;
- }
|
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 :
- template <class Compare>
- void merge(list<T> & x, Compare comp);
|
je vois pas trop comment on utilise ça... j'avais essayé ça :
Code :
- class comparaison
- {
- public:
- bool operator()(int a, int b)
- {
- return (a>b);
- }
- };
- liste1.merge(liste2, comparaison());
|
mais ça marche pas...
donc voilà si vous pouvez m'aider ça serait sympa...