Ich benötige einen binären Suchalgorithmus, der mit den C ++ STL-Containern kompatibel ist, ähnlich wie std::binary_search
im <algorithm>
Header der Standardbibliothek , aber ich brauche ihn, um den Iterator zurückzugeben, der auf das Ergebnis zeigt, und keinen einfachen Booleschen Wert, der mir sagt, ob das Element vorhanden ist.
(Nebenbei bemerkt, was zum Teufel hat das Standardkomitee gedacht, als es die API für binary_search definiert hat?!)
Mein Hauptanliegen hierbei ist, dass ich die Geschwindigkeit einer binären Suche benötige. Obwohl ich die Daten mit anderen Algorithmen finden kann, wie unten erwähnt, möchte ich die Tatsache nutzen, dass meine Daten sortiert sind, um die Vorteile einer binären Suche zu nutzen Suche, keine lineare Suche.
bisher lower_bound
und upper_bound
scheitern, 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 kann auch einen Algorithmus verwenden, der nicht zum Standard-Namespace gehört, solange er mit Containern kompatibel ist. Wie zum Beispiel boost::binary_search
.