Sdílet prostřednictvím


upper_bound

Vyhledá první prvek pozice v objednané rozsah, který má hodnotu, která je větší než zadaná hodnota, kde lze zadat kritéria řazení binárního predikátu.

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
    První prvek pozice v rozsahu mají být prohledány.

  • _Last
    Poloha jedna za poslední prvek v rozsahu mají být prohledány.

  • _Val
    Hodnota v rozsahu objednané potřebuje překročila hodnotu prvku adresovány iterační vrácena.

  • _Comp
    Uživatelem definované funkce predikátu objektu, který definuje smysl, ve kterém jeden prvek je menší než jiné.Binárního predikátu trvá dva argumenty a vrátí true -li splněna a false Pokud nejsou splněny.

Vrácená hodnota

Iterační vpřed na pozici prvního prvku, který má hodnotu větší než zadaná hodnota.

Poznámky

Seřazené zdrojové oblasti odkazuje, musí být platné; u iterátorů všechny musí být dereferenceable a v rámci sekvence musí být dostupná z první poslední pozice ve incrementation.

Seřazené oblasti je podmínkou pro použití upper_bound a kde kritérium řazení je stejné jako podle binárního predikátu.

Rozsah není modifikován upper_bound.

Nižší hodnoty typů dopředu u iterátorů třeba-než srovnatelné objednáno, tak, aby dané dva prvky, ji může stanovit nebo že jsou rovnocenné (v tom smyslu, že ani menší než ostatní), jeden je menší než ostatní.Výsledkem je pořadí mezi prvky nonequivalent

Složitost algoritmu je pro náhodný přístup u iterátorů logaritmické a jinak s počet kroků úměrné lineární (_Last1 – _First1).

Příklad

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

Požadavky

Záhlaví: <algorithm>

Obor názvů: std

Viz také

Referenční dokumentace

Predicate Version of upper_bound

upper_bound (STL Samples)

Standardní šablona knihovny