J'ai besoin d'un binaire de l'algorithme de recherche qui est compatible avec la norme C++ conteneurs, quelque chose comme std::binary_search dans la bibliothèque standard de l' <algorithm>
- tête, mais à la différence de std::binary_search, j'en ai besoin pour retourner l'itérateur qui pointe le résultat, non pas d'une simple booléen me dire si l'élément existe
(Sur une note de côté, ce que l'enfer était le comité des normes de la pensée quand ils ont défini l'API pour binary_search!!!)
Edit: Ma principale préoccupation ici est que j'ai besoin de la vitesse d'une binaire de recherche, si bien que je peux trouver les données avec d'autres algorithmes, comme mentionné ci-dessous, je veux profiter de mes données sont déjà triées pour obtenir les avantages d'une binaire de recherche, et pas seulement de la recherche.
jusqu'à présent lower_bound et upper_bound échouer, parce que 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
Aussi, je doute vraiment lower_bound et upper_bound sont mis en œuvre comme binary_searches, parce qu'ils fonctionnent aussi bien avec des données non triées, et il n'existe aucun moyen de fournir des informations à travers les arguments ou les politiques.
Ok d'abord mentionné par vividos, elles NE nécessitent des données triées, ce qui signifie qu'ils SONT binaires de recherche, de sorte que le monde est bon à nouveau :)
Note: je suis aussi fine à l'aide d'un algorithme qui n'appartient pas à l'espace de noms std aussi longue que il est compatible avec les conteneurs. Aime dire boost::binary_search ou quelque chose