& lt; Algorithmus & gt; Funktion zum Finden des letzten Artikels, der kleiner als gleich ist, wie lower_bound
Gibt es eine Funktion, die benutzt binäre Suche, wie lower_bound
aber das gibt die letzten Element weniger-als-oder-gleich-zu nach einem bestimmten Prädikat?
lower_bound
ist definiert zu:
Findet die position des ersten element in einer geordneten Reihe, die einen Wert hat größer als oder gleichwertig zu einen bestimmten Wert, wo die Bestellung Kriterium kann angegeben werden, indem ein binäres Prädikat.
sowie upper_bound
:
Findet die position des ersten element in einer geordneten Reihe, die einen Wert hat, ist größer als einen bestimmten Wert, wo die Bestellung Kriterium kann angegeben werden, indem ein binäres Prädikat.
Speziell, ich habe einen container von Zeit bestellt Ereignisse und für eine bestimmte Zeit möchte ich finden das Letzte Element, das vor oder an diesem Punkt. Kann ich erreichen, das mit einer Kombination von upper/lower bound -, reverse-Iteratoren und mit std::greater
oder std::greater_equal
?
BEARBEITEN:
Ein zwicken war nötig, um das user763305 Anregung zu bewältigen, wenn Sie Fragen, für einen Punkt vor der start der Reihe:
iterator it=upper_bound(begin(), end(), val, LessThanFunction());
if (it!=begin()) {
it--; //not at end of array so rewind to previous item
} else {
it=end(); //no items before this point, so return end()
}
return it;
InformationsquelleAutor der Frage the_mandrill | 2012-04-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
In einen sortierten container, der das Letzte element, das kleiner als oder gleichwertig zu
x
ist das element vor dem ersten element, der größer ist alsx
.Damit Sie anrufen können
std::upper_bound
und Dekrementieren der zurückgegebene iterator einmal.(Vor Dekrementieren, müssen Sie natürlich prüfen, dass es nicht der begin iterator; wenn es ist, dann gibt es keine Elemente, die weniger als oder gleichwertig zu
x
.)InformationsquelleAutor der Antwort user763305
Hier ist eine wrapper-Funktion um upper_bound, das gibt die größte Zahl in einen container oder ein array zurück, das ist weniger als oder gleich einem bestimmten Wert:
Für eine bessere Erklärung, was das ist und wie verwenden Sie diese Funktion, check-out:
C++ - STL — Finden Sie die Letzte Zahl, die kleiner als oder gleich einem gegebenen element in einem array oder container
InformationsquelleAutor der Antwort
Habe ich testen Sie Ihre reverse-iterator-Lösung, es ist richtig.
Gegeben
v
ist sortiert nach '<'Finden Letzte element weniger als x:
Finden Letzte element ungleich x:
Dies ist besser als
iter -= 1
versionInformationsquelleAutor der Antwort jean