J'ai besoin d'un algorithme de recherche binaire compatible avec les conteneurs C ++ STL, quelque chose comme std::binary_search
dans l'en- <algorithm>
tête de la bibliothèque standard , mais j'en ai besoin pour renvoyer l'itérateur qui pointe sur le résultat, pas un simple booléen me disant si l'élément existe.
(En passant, à quoi pensait le comité standard quand ils ont défini l'API pour binary_search?!)
Ma principale préoccupation ici est que j'ai besoin de la vitesse d'une recherche binaire, donc bien que je puisse trouver les données avec d'autres algorithmes, comme mentionné ci-dessous, je veux profiter du fait que mes données sont triées pour bénéficier des avantages d'un binaire recherche, pas une recherche linéaire.
jusqu'ici lower_bound
et upper_bound
échouer si la donnée est manquante:
//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
Remarque: je suis également très bien en utilisant un algorithme qui n'appartient pas à l'espace de noms std tant qu'il est compatible avec les conteneurs. Comme, par exemple, boost::binary_search
.