Avec une carte / set / multiset / multi-map STL, comment trouver la première valeur supérieure ou égale à la clé de recherche?
-
05-07-2019 - |
Question
Supposons que j'ai un ensemble de valeurs, stockées dans un std :: set:
{1, 2, 6, 8}
et j'ai une clé de recherche, disons 3. Je veux mettre 3 dans une fonction et obtenir la première valeur supérieure ou égale à 3, dans ce cas je voudrais obtenir 6.
La fonction find () fournie dans map / set / multimap / et set retournera, bien sûr, l’itérateur de fin pour ce cas. Existe-t-il une fonction similaire à rechercher qui renvoie 6 dans ce cas?
La solution
Oui: upper_bound (X)
renvoie un itérateur pointant sur le premier élément supérieur à X
. Il existe également une fonction lower_bound (X)
qui retourne un itérateur pointant sur le premier élément non inférieur à X
. Ainsi, tous les éléments de l'intervalle de demi-ouverture [lower_bound (X), upper_bound (X))
seront égaux à X.
Autres conseils
Vous souhaitez utiliser la fonction upper_bound .
map<int, int> mymap = { 1,2,6,8 };
map<int,int>::iterator i = mymap.upper_bound(3); // returns an iterator to the '6' element.
Oups, je voulais dire lower_bound , la fonction membre, pas l'algorithme. .
S'il n'y a rien dans l'ensemble qui soit supérieur ou égal à votre élément de recherche, il retournera end ().