Bonjour.
Pour un petit projet, j'ai créé une classe "Entity", qui possède un accesseur get_volume() renvoyant un entier.
J'utilise également une deque pour ranger ces objets, par volume décroissant. J'avais pensé faire de la façon suivante :
mais évidemment le compilateur apprécie moyennement que je considère l'itérateur comme une Entity. J'ai essayé en modifiant le prédicat de diverses manières, mais je ne voit pas comment juste à partir de l'itérateur je peux utiliser get_volume(). Je n'ai pas non plus réussi à créé de prédicat prenant thing.get_volume comme paramètre.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 void insert_entity(ent::Entity thing) { std::deque<ent::Entity>::iterator i = find_if(m_entities[x][y][z].begin(), m_entities[x][y][z].end(), i.get_volume()<=thing.get_volume()); m_entities[x][y][z].insert(i, thing); }
J'ai aussi essayé d'utilisé un std::set, avec un foncteur pour les classer, j'avais aussi pensé utiliser une technique récursive sur une liste, mais je ne voyais pas comment coder élégamment la queue de la liste.
Donc voila mon problème, comment insérer efficacement (de préférence dans une deque ou une liste) un élément qui sera classé suivant la valeur rendue par get_volume() ?
Partager