J'ai un STL :: multimap et je le recherche avec equal_range pour renvoyer une limite supérieure et inférieure. Puis-je trouver le nombre d'éléments dans cette gamme sans les parcourir tous et les compter un par un?C++ Trouver le nombre d'éléments dans une plage à partir d'un STL :: multimap
#include <iostream>
#include <map>
using namespace std;
int main() {
multimap<int,int> mm;
pair<multimap<int, int>::iterator,multimap<int, int>::iterator> ret;
multimap<int,int>::iterator retit;
for (int n=0; n<100; n++) {
mm.insert (make_pair(rand()%10,rand()%1000));
}
ret = mm.equal_range(5);
int ct = 0;
for (retit=ret.first; retit!=ret.second; ++retit) {
cout << retit->second << endl;
ct++;
}
cout << ct << endl;
return 0;
}
Merci pour la réponse rapide! Est-ce que cela me sauverait de la vitesse ou est-ce que cela fait la même chose que ce que je montre ci-dessus? Je montre au bas de cette page: http://www.cplusplus.com/reference/std/iterator/distance/ qu'il pourrait être plus rapide O (1) mais je ne suis pas sûr si c'est un 'aléatoire accéder à l'itérateur 'ou non. – Travis
Non, cela ne vous fera pas gagner du temps. C'est un temps constant pour les itérateurs à accès aléatoire (comme l'itérateur vectoriel). Mais puisque la carte a un itérateur bidirectionnel, la complexité du temps sera linéaire. – Naveen
Ok merci pour votre temps ici. – Travis