Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

set et mutable iterator

3 réponses
Avatar
Frédéric Mayot
Bonjour à tous,

Je me demandais la manière dont je devais procéder pour gérer les
modifications de clés dans un set. Visiblement la STL ne propose pas
d'itérateur mutable (quelle est la traduction française d'ailleurs ?)
sur un set. Comme je gère des pointeurs dans mon set, ce ne pas très
compliqué, il me suffit de le supprimer puis de le réinsérer à la bonne
place (j'ai bien sûr un foncteur de comparaison pour mes pointeurs).

Ne vaudrait-il pas mieux que je dérive une classe de set et que
j'implémente ce type d'itérateur ? Ce travail n'aurait-il pas déjà été
fait par quelqu'un.

Merci.

Fred

3 réponses

Avatar
Fabien LE LEZ
On Thu, 30 Oct 2003 23:23:53 +0100, Frédéric Mayot
wrote:

Je me demandais la manière dont je devais procéder pour gérer les
modifications de clés dans un set. Visiblement la STL ne propose pas
d'itérateur mutable
sur un set.


Yep, un prérequis pour l'usage de set, map et multimap est que les
clés ne soient pas modifiées.

Comme je gère des pointeurs dans mon set, ce ne pas très
compliqué, il me suffit de le supprimer puis de le réinsérer à la bonne
place (j'ai bien sûr un foncteur de comparaison pour mes pointeurs).


Si tu as régulièrement ce genre d'opérations à effectuer, il y a des
chances pour que std::set<> ne soit pas le conteneur qui convient.

Ne vaudrait-il pas mieux que je dérive une classe de set


Non : on ne dérive pas d'un conteneur de la STL, ils ne sont pas
prévus pour.


--
;-)

Avatar
Mathieu Peyréga
Non : on ne dérive pas d'un conteneur de la STL, ils ne sont pas
prévus pour.


c'est vrai ça ?

Avatar
Fabien LE LEZ
On Sun, 02 Nov 2003 22:22:19 +0100, Mathieu Peyréga
wrote:

Non : on ne dérive pas d'un conteneur de la STL, ils ne sont pas
prévus pour.


c'est vrai ça ?


Ils n'ont pas de destructeur virtuel.
Du coup, le code suivant compilera sans problème, mais le comportement
à l'exécution risque d'être assez fantaisiste :

class A: public std::vector<int>
{
//...
};

int main()
{
std::vector<int>* ptr= new A;
delete ptr;
}

--
;-)