std:: bsearch
|
Défini dans l'en-tête
<cstdlib>
|
||
|
void
*
bsearch
(
const
void
*
key,
const
void
*
ptr,
std::
size_t
count,
std::
size_t
size,
/* c-compare-pred */
*
comp
)
;
|
(1) | |
|
extern
"C"
using
/* c-compare-pred */
=
int
(
const
void
*
,
const
void
*
)
;
extern "C++" using /* compare-pred */ = int ( const void * , const void * ) ; |
(2) | ( exposition uniquement* ) |
Trouve un élément égal à l'élément pointé par key dans un tableau pointé par ptr . Le tableau contient count éléments de size octets chacun et doit être partitionné par rapport à l'objet pointé par key , c'est-à-dire que tous les éléments qui se comparent comme inférieurs doivent apparaître avant tous les éléments qui se comparent comme égaux, et ceux-ci doivent apparaître avant tous les éléments qui se comparent comme supérieurs à l'objet clé. Un tableau entièrement trié satisfait à ces exigences. Les éléments sont comparés à l'aide de la fonction pointée par comp .
Le comportement n'est pas défini si le tableau n'est pas déjà partitionné en ordre croissant par rapport à la clé, selon le même critère que celui utilisé par comp .
Si le tableau contient plusieurs éléments que comp indiquerait comme égaux à l'élément recherché, alors il n'est pas spécifié quel élément la fonction retournera comme résultat.
Table des matières |
Paramètres
| key | - | pointeur vers l'élément à rechercher |
| ptr | - | pointeur vers le tableau à examiner |
| count | - | nombre d'éléments dans le tableau |
| size | - | taille de chaque élément du tableau en octets |
| comp | - |
fonction de comparaison qui retourne une valeur entière négative si le premier argument est
inférieur
au second, une valeur entière positive si le premier argument est
supérieur
au second et zéro si les arguments sont équivalents.
key
est passé comme premier argument, un élément du tableau comme second.
La signature de la fonction de comparaison doit être équivalente à : int cmp ( const void * a, const void * b ) ; La fonction ne doit pas modifier les objets qui lui sont passés et doit retourner des résultats cohérents lorsqu'elle est appelée pour les mêmes objets, indépendamment de leurs positions dans le tableau. |
Valeur de retour
Pointeur vers l'élément trouvé ou pointeur nul si l'élément n'a pas été trouvé.
Notes
Malgré son nom, ni les normes C ni POSIX n'exigent que cette fonction soit implémentée en utilisant une recherche binaire ou ne fournissent aucune garantie de complexité.
Les deux surcharges fournies par la bibliothèque standard C++ sont distinctes car les types du paramètre comp sont distincts (la liaison de langage fait partie de son type).
Exemple
#include <array> #include <cstdlib> #include <iostream> template<typename T> int compare(const void *a, const void *b) { const auto &arg1 = *(static_cast<const T*>(a)); const auto &arg2 = *(static_cast<const T*>(b)); const auto cmp = arg1 <=> arg2; return cmp < 0 ? -1 : cmp > 0 ? +1 : 0; } int main() { std::array arr{1, 2, 3, 4, 5, 6, 7, 8}; for (const int key : {4, 8, 9}) { const int* p = static_cast<int*>( std::bsearch(&key, arr.data(), arr.size(), sizeof(decltype(arr)::value_type), compare<int>)); std::cout << "value " << key; if (p) std::cout << " found at position " << (p - arr.data()) << '\n'; else std::cout << " not found\n"; } }
Sortie :
value 4 found at position 3 value 8 found at position 7 value 9 not found
Voir aussi
|
trie une plage d'éléments de type non spécifié
(fonction) |
|
|
retourne la plage d'éléments correspondant à une clé spécifique
(modèle de fonction) |
|
|
Documentation C
pour
bsearch
|
|