Udostępnij za pośrednictwem


upper_bound

Znajduje pozycję pierwszego elementu w uporządkowanego zakresu ma wartość, która jest większa niż określona wartość, gdy kryterium sortowania może być określona przez predykatu dwuelementowego.

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
   );

Parametry

  • _First
    Pozycja pierwszego elementu w zakresie, który ma być przeszukiwany.

  • _Last
    Położenie jednej w przeszłości końcowy element w zakresie, który ma być przeszukiwany.

  • _Val
    Wartość uporządkowanego zakresu, który musi zostać przekroczone przez wartość elementu adresowane przez iteratora zwracane.

  • _Comp
    Obiekt predykatu funkcję zdefiniowaną przez użytkownika, który definiuje znaczeniu, w którym jeden element jest mniejsza niż inna.Predykatu dwuelementowego ma dwa argumenty i zwraca true po stwierdzeniu i false , gdy nie są spełnione.

Wartość zwracana

Do przodu iteratora położenie pierwszego elementu, który ma wartość większą niż określona wartość.

Uwagi

Odwołanie do zakresu sortowane źródła musi być ważny; Iteratory wszystkie muszą być dereferenceable i w ramach sekwencji ostatniej pozycji musi być osiągalny od pierwszego przez incrementation.

Sortowanym zakresie jest warunkiem wstępnym stosowania upper_bound , gdy kryterium sortowania jest taki sam, jak określony przez predykatu dwuelementowego.

Zakres nie jest modyfikowany przez upper_bound.

Typy wartości Iteratory do przodu muszą być mniej-niż porównywalne zamawiać tak, że biorąc pod uwagę dwa elementy, można ustalić są równoważne (w tym sensie, że nie jest mniejsza niż drugi) albo jednym jest mniejsza niż inne.Powoduje porządkowanie między elementami nonequivalent

Złożoność algorytm jest logarytmiczna dla Iteratory random access i liniowy inaczej, z liczbą proporcjonalny do czynności (_Last1 — _First1).

Przykład

// 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;
}
  
  
  
  
  
  

Wymagania

Nagłówek: <algorithm>

Obszar nazw: std

Zobacz też

Informacje

Predicate Version of upper_bound

upper_bound (STL Samples)

Standardowa biblioteka szablonu