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