Ich brauche einen binären Suchalgorithmus, der kompatibel ist mit den C++ STL-Containern, etwa std::binary_search
in der Standard-Bibliothek <algorithm>
Header, aber ich brauche es den Iterator, der auf das Ergebnis verweist, nicht eine einfache Boolean sagen mir, ob das Element existiert.Wo kann ich einen "nützlichen" C++ - Binärsuchalgorithmus bekommen?
(Auf einer Seite zur Kenntnis, was zum Teufel das Standard-Komitee Denken war, als sie die API für binary_search ?! definiert)
Mein hier Hauptanliegen ist, dass ich die Geschwindigkeit einer binären Suche benötigen, so dass, obwohl ich kann die Daten mit anderen Algorithmen finden, wie unten erwähnt, möchte ich die Tatsache nutzen, dass meine Daten sortiert sind, um die Vorteile einer binären Suche, nicht eine lineare Suche zu erhalten.
bisher lower_bound
und upper_bound
fehlschlagen, wenn das Datum fehlt:
//lousy pseudo code
vector(1,2,3,4,6,7,8,9,0) //notice no 5
iter = lower_bound_or_upper_bound(start,end,5)
iter != 5 && iter !=end //not returning end as usual, instead it'll return 4 or 6
Hinweis: Ich bin auch in Ordnung unter Verwendung eines Algorithmus, der dem std-Namespace gehört nicht so lange seine kompatibel mit Behälter. Wie zum Beispiel, boost::binary_search
.
In Bezug auf die Bearbeitung: Deshalb ist std :: equal_range die Lösung. Andernfalls müssen Sie auf Gleichheit prüfen (oder Äquivalenz ist mehr) –
Sie müssen auf Gleichheit prüfen, nachdem Sie (lower/outer) _bound verwendet haben (siehe Antwort unten). –
"mehr ... präzise" –