C ++ Ermitteln Sie die Anzahl der Elemente in einem Bereich von einem stl :: multimap
Frage
Ich habe ein stl :: multimap und suche es mit Equal_Range, um eine obere und untere Grenze zurückzugeben. Kann ich die Anzahl der Elemente in diesem Bereich finden, ohne sie alle durchzusetzen und sie einzeln zu zählen?
#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;
}
Lösung
Verwenden std::distance
Algorithmus, um den Abstand zwischen den Iteratoren zu finden. Wie:
int ct1 = std::distance(ret.first, ret.second);
Andere Tipps
Wenn Sie nur die Anzahl der Elemente mit einem bestimmten Schlüssel zählen möchten, verwenden Sie count
:
int ct = mm.count(5);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow