Insertion dans un set à l'aide d'itérateurs
Résolu/Fermé
A voir également:
- Insertion dans un set à l'aide d'itérateurs
- Insertion liste déroulante excel - Guide
- Insertion signature word - Guide
- Insertion sommaire word - Guide
- Insertion filigrane word - Guide
- Touche insertion clavier - Guide
2 réponses
Dalfab
Messages postés
706
Date d'inscription
dimanche 7 février 2016
Statut
Membre
Dernière intervention
2 novembre 2023
101
3 juin 2016 à 23:44
3 juin 2016 à 23:44
Bonjour,
On ne peut pas modifier directement un élément d'un set<>, si on pouvait faire cela, le set<> ne pourrait pas garantir que les éléments sont toujours triés.
Ici j itère dans un set<> donc j->stops est constant.
Les set<> ne sont vraiment pas fait pour des objets qui varient.
Dans une map<> la clef qui permet le tri est disjointe de l'objet, on peut modifier les objets; dans la plupart des autres collections aussi, mais pas dans un set<>.
On ne peut pas modifier directement un élément d'un set<>, si on pouvait faire cela, le set<> ne pourrait pas garantir que les éléments sont toujours triés.
Ici j itère dans un set<> donc j->stops est constant.
Les set<> ne sont vraiment pas fait pour des objets qui varient.
Dans une map<> la clef qui permet le tri est disjointe de l'objet, on peut modifier les objets; dans la plupart des autres collections aussi, mais pas dans un set<>.
Dalfab
Messages postés
706
Date d'inscription
dimanche 7 février 2016
Statut
Membre
Dernière intervention
2 novembre 2023
101
4 juin 2016 à 12:47
4 juin 2016 à 12:47
La structure que je vois par reverse sur tes données.
Un exemple avec des relations d'inclusion et de désignations (il y a des pointeurs mais jamais d'allocation dynamique)
- Un arrêt peut être sur plusieurs routes et a un nom.
- Une route est composée d'arrêts, chaque arrêt y est caractérisé par un horaire.
- Un car parcours une route.
- Plusieurs cars peuvent parcourir une même route.
Un exemple avec des relations d'inclusion et de désignations (il y a des pointeurs mais jamais d'allocation dynamique)
struct Stop { std::string name; }; struct Section { Stop* pstop; // 'designe' l'arret a la fin du troncon unsigned horaire; class Route *proute; // 'designe' la route qui utilise ce troncon }; class Route { public: void addStop( Stop* pstop , unsigned int minutes ) { remStop(pstop); // s'assurer que ce stop n'est qu'une fois sur la route sections.emplace_back( pstop , minutes , this ); } void remStop( Stop* pstop ) { for ( auto isect = sections.begin() ; isect != sections.end() ; ) { if ( isect->pstop == pstop ) isect = sections.erase( isect ); else ++isect; } } std::string name; std::vector<Sections> sections; // 'contient' des troncons 'ordonnes' qui 'utilisent' des arrets }; class Bus { public: setRoute( Route* proute ) { this->proute = proute; driving_time = 0; if ( proute ) for ( Section const& section : proute->sections ) driving_time += section.minutes; } int id; Route* proute = 0; int driving_time = 0; }; class DataStructure { public: void addStopToRoute(Route* proute, Stop* pstop, unsigned minutes) { proute->addStop( pstop , minutes ); } std::vector<Route> theRoutes; std::vector<Stops> theStops; std::vector<Bus> theBuses; };
4 juin 2016 à 01:32
Donc si je veux faire une insertion dans un set<>, je devrais faire une autre fonction qui cherche sa place ? Mais il y a une chose qui me laisse perplexe, je réalise une insertion au début de l’exécution qui sert à remplir tous mes set<>, celle ci marche parfaitement ?
Le mieux serait que je passe sur une map<> qui les garderait triés ? Y a-t-il beaucoup de différences d'implémentation entre les deux, dois-je modifier la façon dont j'ai tout codé ?
Merci encore !
Modifié par Dalfab le 4/06/2016 à 07:38
Le set comme le map n'est absolument pas adapté aux parcours, hors le code en exemple ne fait que des parcours de recherche sans utiliser le fait qu'il sont triés.
Et la structure me parait avoir un fonctionnement curieux, quand on fait un insert() d'un stop trouvé, on crée un clone qui a le même 'id' mais les 2 stops évoluerons indépendamment l'un de l'autre.
Il faut bien distinguer les relations d'inclusions des relations de liens.
Est-ce qu'un stop contient un ensemble de routes?
Est-ce qu'une route contient un ensemble de stops?
Si les deux sont vrais, on ne peut pas avoir MonStop dans MaRoute dans MonStop, cela serait une boucle infinie.
Je pense qu'il donc plutôt des pointeurs etqu'il faut éviter plur le moment les objets tels que les set ou les map.
4 juin 2016 à 10:52
Je n'avais pas pensé à la boucle infinie
En fait j'ai besoin de les garder triés, mais ce serait probablement plus simple avec des pointeurs, effectivement, merci beaucoup