Les version C et C++ ne sont surtout pas du tout équivalentes:
Sans blague. L'interface requise pour bsearch() et std::equal_range() n'est pas du tout la même. Donc les fonctions ne font pas la même chose. T'en a d'autres comme ça des portes ouvertes à enfoncer ?
La plupart des algorithmes de la bibliothèque standard réclament une fonction de comparaison qui introduit un ordre strict faible. Pour les non-matheux, ça veut dire une fonction booléene compare(a,b) qui doit retourner vrai si a est strictement en dessous de b. On teste l'égalité trivialement avec not compare(a,b) and not compare(b,a), même si en pratique, c'est souvent testé en même temps que les inégalités à coup de branches du style :
if(compare(a,b)){/* a en dessous de b */}elseif(compare(b,a)){/* a au dessus de b */}else{/* a équivalent à b */}
Par défaut, ça utilise std::less (donc a<b). Là le monsieur doit avoir un tableau d'entiers trié par ordre décroissant, et à choisi de ré-implémenter std::greater plutôt que d'utiliser celui qui est dans la bibliothèque standard.
[^] # Re: heuuuu
Posté par Batchyx . En réponse au journal Si si, le C++ peut parfois être plus rapide que le C. Évalué à 1.
Sans blague. L'interface requise pour
bsearch()etstd::equal_range()n'est pas du tout la même. Donc les fonctions ne font pas la même chose. T'en a d'autres comme ça des portes ouvertes à enfoncer ?La plupart des algorithmes de la bibliothèque standard réclament une fonction de comparaison qui introduit un ordre strict faible. Pour les non-matheux, ça veut dire une fonction booléene
compare(a,b)qui doit retourner vrai si a est strictement en dessous de b. On teste l'égalité trivialement avecnot compare(a,b) and not compare(b,a), même si en pratique, c'est souvent testé en même temps que les inégalités à coup de branches du style :Par défaut, ça utilise
std::less(donc a<b). Là le monsieur doit avoir un tableau d'entiers trié par ordre décroissant, et à choisi de ré-implémenterstd::greaterplutôt que d'utiliser celui qui est dans la bibliothèque standard.