Ho bisogno di un algoritmo di ricerca binaria che sia compatibile con i contenitori C ++ STL, qualcosa come std::binary_search
nell'intestazione della libreria standard <algorithm>
, ma mi serve per restituire l'iteratore che punta al risultato, non un semplice booleano che mi dice se l'elemento esiste.
(In una nota a margine, cosa diavolo stava pensando il comitato standard quando ha definito l'API per binary_search ?!)
La mia preoccupazione principale qui è che ho bisogno della velocità di una ricerca binaria, quindi anche se posso trovare i dati con altri algoritmi, come indicato di seguito, voglio sfruttare il fatto che i miei dati sono ordinati per ottenere i vantaggi di un binario ricerca, non una ricerca lineare.
finora lower_bound
e upper_bound
fallire se manca il dato:
//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
Nota: sto anche bene usando un algoritmo che non appartiene allo spazio dei nomi std purché sia compatibile con i contenitori. Come, ad esempio, boost::binary_search
.