Partager via


upper_bound

Recherche la position du premier élément dans une plage dimensionné avec une valeur qui est supérieure à une valeur spécifiée, où le critère de classement peut être spécifié par un attribut binaire.

template<class ForwardIterator, class Type>
   ForwardIterator upper_bound(
      ForwardIterator _First, 
      ForwardIterator _Last,
      const Type& _Val
   );
template<class ForwardIterator, class Type, class Predicate>
   ForwardIterator upper_bound(
      ForwardIterator _First, 
      ForwardIterator _Last,
      const Type& _Val,
      Predicate _Comp
   );

Paramètres

  • _First
    Position du premier élément dans la plage à rechercher.

  • _Last
    Une position au delà de le dernier élément dans la plage à rechercher.

  • _Val
    La valeur dans la plage taille qui doit être dépassé par la valeur de l'élément traité par l'itérateur retournée.

  • _Comp
    Objet défini par l'utilisateur de fonction de prédicat dans lequel définit le sens celles l'élément est inférieur des autres.Un attribut binaire accepte deux arguments et retourne true si satisfaite et false une fois pas de contenu.

Valeur de retour

Un itérateur en arrière à la position du premier élément ayant une valeur supérieure à une valeur spécifiée.

Notes

La plage source triée référencé doit être valide ; tous les itérateurs doivent être deréférençables et dans la séquence la dernière position doit être accessible dès le début par l'augmentation.

Une plage trié est une condition préalable de l'utilisation d' upper_bound où le critère de classement est le même que celui spécifié par l'attribut binaire.

La plage n'est pas modifié par upper_bound.

Les types valeur des itérateurs direct doivent être inférieur à comparable être ordonné, de sorte que, avec deux éléments, il puisse déterminer l'un ou l'autre qu'ils sont équivalents (dans le sens que ni l'un ni l'autre n'est inférieure à l'autre) ou qu'il est inférieure à l'autre.Cela provoque le classement entre les éléments d'inégalité

La complexité de l'algorithme est logarithmique pour les itérateurs d'accès aléatoire et linéaire sinon, avec le nombre d'étapes proportionnelles à (_Last1 – _First1).

Exemple

// alg_upper_bound.cpp
// compile with: /EHsc
#include <vector>
#include <algorithm>
#include <functional>      // For greater<int>( )
#include <iostream>

// Return whether modulus of elem1 is less than modulus of elem2
bool mod_lesser ( int elem1, int elem2 )
{
   if ( elem1 < 0 ) 
      elem1 = - elem1;
   if ( elem2 < 0 ) 
      elem2 = - elem2;
   return elem1 < elem2;
}

int main( )
{
   using namespace std;
   vector <int> v1;
   vector <int>::iterator Iter1, Result1;

   // Constructing vectors v1a & v1b with default less-than ordering
   int i;
   for ( i = -1 ; i <= 4 ; i++ )
   {
      v1.push_back(  i );
   }

   int ii;
   for ( ii =-3 ; ii <= 0 ; ii++ )
   {
      v1.push_back(  ii  );
   }

   sort ( v1.begin ( ) , v1.end ( ) );
   cout << "Original vector v1 with range sorted by the\n "
        << "binary predicate less than is  v1 = ( " ;
   for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )
      cout << *Iter1 << " ";
   cout << ")." << endl;
   
   // Constructing vectors v2 with range sorted by greater
   vector <int> v2 ( v1 );
   vector <int>::iterator Iter2, Result2;
   sort ( v2.begin ( ) , v2.end ( ) , greater<int> ( ) );
   
   cout << "Original vector v2 with range sorted by the\n "
        <<  "binary predicate greater is    v2 = ( " ;
   for ( Iter2 = v2.begin ( ) ; Iter2 != v2.end ( ) ; Iter2++ )
      cout << *Iter2 << " ";
   cout << ")." << endl;

   // Constructing vectors v3 with range sorted by mod_lesser
   vector <int> v3 ( v1 );
   vector <int>::iterator Iter3, Result3;
   sort ( v3.begin ( ) , v3.end ( ) , mod_lesser );

   cout << "Original vector v3 with range sorted by the\n "
        <<  "binary predicate mod_lesser is v3 = ( " ;
   for ( Iter3 = v3.begin ( ) ; Iter3 != v3.end ( ) ; Iter3++ )
      cout << *Iter3 << " ";
   cout << ")." << endl;

   // upper_bound of 3 in v1 with default binary predicate less <int> ( )
   Result1 = upper_bound ( v1.begin ( ) , v1.end ( ) , 3 );
   cout << "The upper_bound in v2 for the element with a value of 3 is: "
        << *Result1 << "." << endl;

   // upper_bound of 3 in v2 with the binary predicate greater <int> ( )
   Result2 = upper_bound ( v2.begin ( ) , v2.end ( ) , 3, greater <int> ( ) );
   cout << "The upper_bound in v2 for the element with a value of 3 is: "
        << *Result2 << "." << endl;

   // upper_bound of 3 in v3 with the binary predicate  mod_lesser
   Result3 = upper_bound ( v3.begin ( ) , v3.end ( ) , 3,mod_lesser );
   cout << "The upper_bound in v3 for the element with a value of 3 is: "
        << *Result3 << "." << endl;
}
  
  
  
  
  
  

Configuration requise

en-tête : <algorithm>

l'espace de noms : DST

Voir aussi

Référence

Predicate Version of upper_bound

upper_bound (STL Samples)

Modèles Standard