Essayer d'écrire une méthode qui supprime les premiers éléments (clés les plus bas) N d'une carte STD :: Plan. Essayé ceci: Il fonctionne lorsque le nombre d'éléments est supérieur au nombre demandé à être supprimé. Donc, si j'avais cinq éléments, demande de supprimer 2, les 3 derniers éléments restent. Toutefois, si j'ai un élément et une demande d'effacement 2, je reste un élément restant. P> Y a-t-il un moyen net de couvrir cela? Je pourrais pousser une instruction IF autour de la vérification du nombre de numélystoremove supérieur à map.Size () mais il doit y avoir une meilleure solution? P> P>
4 Réponses :
std :: avancée (i, n) code> a une condition préalable que
i code> peut être incrémenté au moins
n code> fois. Dans votre code, vous ne vérifiez pas cette condition préalable, donc si vous l'appelez avec
numelementalemove> Originalsize code>, vous enfreignez cette condition préalable et subit ainsi un comportement non défini. Pour résoudre ce problème, vous devez faire le chèque avant d'appeler
std :: avancement code>, peut-être utiliser
std :: min code>:
Un si code> instruction fournit une solution simple et lisible:
La manière la plus simple que je puisse voir pour ce faire serait d'utiliser std :: Suivant code> et une instruction IF.
void EraseNMapElements(const int numElementsToRemove)
{
if (_map.size() < numElementsToRemove)
_map.erase(_map.begin(), std::next(_map.begin(), numElementsToRemove));
else
_map.clear();
}
Une chose qui n'a pas encore été mentionnée et c'est bon à savoir, c'est que depuis C ++ 11 std :: map :: Effacer (const_iterator) renvoie réellement un itérateur à l'élément suivant. Donc, le code pourrait également être écrit comme suit: Ceci traversera les éléments à effacer une fois au lieu de deux fois. P> p>
Vrai. Dans le même temps, il est tout à fait possible que le multi-élément effacer code> pourrait être optimisé pour réduire considérablement le nombre d'opérations d'équilibrage nécessaires, comparativement à une effacement à une fois à la fois. Comme toujours: lorsque vous considérez la performance, mesurez-la.
Pourquoi y aurait-il une meilleure solution que la solution la plus simple?