upper_bound
Cerca la posizione del primo elemento in un intervallo ordinato con un valore maggiore di un valore specificato, dove il criterio di ordinamento può essere specificato da un predicato binario.
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
);
Parametri
_First
La posizione del primo elemento nell'intervallo da rilevare._Last
La posizione una dopo l'elemento finale nell'intervallo da rilevare._Val
Il valore nell'intervallo ordinato che deve essere ignorato dal valore dell'elemento indirizzato dall'iteratore restituito._Comp
Oggetto definito dall'utente di funzione predicativa in cui viene definito il concetto cui è minore di un'altra.Un predicato binario accetta due argomenti e restituisce true una volta soddisfatti e false una volta non soddisfatta.
Valore restituito
Un iteratore avanti nella posizione del primo elemento con un valore maggiore di un valore specificato.
Note
l'intervallo di origine ordinato fatto riferimento deve essere valido; tutti gli iteratori devono essere dereferenceable e all'interno della sequenza dell'ultima posizione sia raggiungibile da prima dall'aumento.
Un intervallo ordinato è una precondizione utilizzo upper_bound e il criterio di ordinamento corrisponde allo specifico del predicato binario.
L'intervallo non viene modificato da upper_bound.
I tipi di valore degli iteratori avanti devono essere minore di. confrontabile essere ordinatoe, pertanto, specificando due elementi, può essere determinato o che sono equivalenti in quanto non è inferiore all'altro) o che ne è inferiore all'altro.Ciò comporta un ordine tra elementi antivalenti
La complessità dell'algoritmo è in caso contrario logaritmica per gli iteratori di accesso casuale e lineare, con il numero di passaggi proporzionali a*_Last1 (– _First1*).
Esempio
// 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;
}
Requisiti
intestazione: <algorithm>
Spazio dei nomi: deviazione standard