Alors mon problème est le suivant, j'ai voulu utiliser un type class dans un conteneur de type std::set. J'arrive à créer la variable sans problème (std::set<type class>) mais ça coince dès que j'essaie d'utiliser une méthode que ce soit insert() ou erase().
Ce qui m'amène à cette question, pour utiliser un type dérivé (class, struct etc...)dans un conteneur std::set faut-il surcharger certains opérateurs en particulier ?
Et si je suis complètement à côté de la plaque que faut-il faire ?
Au faite ce que je veux dire par là c'est que j'ai une erreur de compilation (no match for 'operator<') et en voyant cela je suis allé surchargé l'opérateur dont il est question dans ma classe, mais même avec ça j'ai toujours la même erreur de compilation.
En effet, un std::set à besoin de trier ses objets (ça lui sert aussi à vérifier l'unicité des objets), donc il est nécessaire d'implémenter cet operator<. On peut aussi transmettre à std::set comment trier les objets mais c'est un peu plus lourd à gérer. Si tu as la même erreur c'est que tu n'as pas bien implémenté l'operator<.
(Cet exemple minimaliste est la meilleure façon de définir l'opérateur <: hidden-friend, libre et symétrique, garantie sans exception. Comme Dalfab l'a dit, on peut injecter le prédicat de comparaison d'autres façons)
(pour ceux qui déterreront dans quelques années, en C++20, on surchargera à la place le space-ship operator, peut-^etre juste avec un `= default` selon les champs de la classe)
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
En recherche d'emploi.