Existe-t-il un moyen agréable et simple de trouver nth element
dans C++
std::map
? Particulièrement je cherche un algorithme pour effacer les derniers éléments k
du map
. Cela aurait du sens de récupérer l'itérateur au nth element
et d'appeler le std::map::erase
. L'exigence est que la complexité ne souffre pas - cela devrait être possible d'effacer la plage d'éléments dans O(N)
.Comment effacer les n derniers éléments de la carte C++?
La copie des données ne doit pas être effectuée uniquement pour effacer les éléments. Par exemple, une solution consiste à copier les données dans std::vector
, puis faites std::nth_element
sur std::vector
, puis std::map::find
pour trouver l'itérateur afin de savoir d'où effacer.
L'une des autres solutions consiste à simplement itérer sur std::map
en maintenant une variable de compteur sur le nombre d'éléments à supprimer. Cela donnerait O(n)
. Est-ce possible de remplacer la boucle for
par STL algorithm
?
Y at-il une raison pour laquelle 'std :: map' ne fournit pas de solution' O (log (n)) 'pour accéder au nième élément? – Leonid
Il devrait être plus efficace d'enlever "end() - 1" pour k fois. –
Cela ressemble à une solution raisonnable Stefan. – Leonid