Ho un STL :: multimap e lo cerco con equal_range per restituire un limite superiore e inferiore. Posso trovare il numero di elementi in questo intervallo senza scorrere tutti e contarli uno per uno?C++ Trova il numero di elementi in un intervallo da 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;
}
Grazie per la rapida risposta! Questo mi farà risparmiare velocità o fa lo stesso che sto mostrando sopra? Sto mostrando in fondo a questa pagina: http://www.cplusplus.com/reference/std/iterator/distance/ che potrebbe essere più veloce O (1) ma non sono sicuro se questo è un 'casuale accesso iteratore 'o no. – Travis
No, non ti salverà in qualsiasi momento. È un tempo costante per gli iteratori di accesso casuale (come iteratore vettoriale). Ma dal momento che la mappa ha un iteratore bidirezionale, avrà una complessità temporale lineare. – Naveen
Ok grazie per il tuo tempo qui. – Travis