Ich möchte die Anzahl der Einträge zwischen zwei Iteratoren einer std::multimap
in weniger als O (N) Zeit zählen. Gibt es Tricks oder clevere Möglichkeiten, dies zu tun?Anzahl der Einträge zwischen zwei std :: multimap Iteratoren effizient zählen
Seit std::multimap
bidirektionale Iteratoren hat, ist mein Verständnis, dass etwas wie std::distance
dies in O (N) Zeit tun könnte.
Zusätzliche Details: Der Schlüssel multimap
ist ein N-Tupel. Ich versuche die Anzahl der Einträge in der multimap
zu finden, deren erstes Element des Schlüssels 0 ist. Die Optionen für das erste Element des Schlüssels sind 0 und 1, und die multimap
verwendet eine strenge schwache Reihenfolge, in der das erste Element des Schlüssels ist immer das Wichtigste. h. alle Elemente mit 0 kommen vor allen Elementen mit 1.
Kontext: Die Iteratoren werden von equal_range
zurückgegeben, die in logarithmischer Zeit läuft. Deklarativ möchte ich die Länge des Bereichs messen.
Vielen Dank.
Ist ein Zähler nicht in Frage? – imreal
Es ist nicht, aber ich würde es vorziehen, einen Zähler nicht manuell zu verwalten, wenn es eine andere Möglichkeit gibt, dies zu tun, die in STL integriert ist oder die keinen separaten Zähler benötigt. – Zach
Es hat mich immer verärgert, dass Map/Set keinen Zugriff auf Tree-Travel-Bits bieten, die so etwas tun könnten. Auch 'std :: lower_bound (map_iter, map_iter, V)' ist aus dem gleichen Grund ineffizient. –