Avec une carte / set / multiset / multi-map STL, comment trouver la première valeur supérieure ou égale à la clé de recherche?

StackOverflow https://stackoverflow.com/questions/176376

  •  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?

Était-ce utile?

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.

lower_bound .

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 ().

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top