upper_bound
Sucht die Position des ersten Elements in einem geordneten Bereich, der hat einen Wert angegeben wird, der größer als ein angegebener Wert ist, in dem Sortierkriterium möglicherweise durch ein binäres Prädikat.
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
);
Parameter
_First
Die Position des ersten Elements im Bereich gefunden werden._Last
Die Position eine hinter dem letzten Element im Bereich gefunden werden._Val
Der Wert im geordneten Bereich, der durch den Wert des Elements überschritten werden muss, das durch den zurückgegebenen Iterator bearbeitet wird._Comp
Benutzerdefiniertes Prädikatfunktionsobjekt, dem Sinne definiert, in dem ein Element kleiner als andere.Ein binäres Prädikat verwendet zwei Argumente und gibt zurück, wenn true erfüllt und false, wenn nicht erfüllt wird.
Rückgabewert
Ein Vorwärtsiterator der Position des ersten Elements, das einen Wert hat, der größer, als ein angegebener Wert ist.
Hinweise
Der sortierte Quellbereich, auf den verwiesen wird, muss gültig sein; alle Iteratoren müssen dereferenzierbar sein und in der Sequenz muss die letzte Position von der ersten durch Zunahme erreichbar sein.
Ein sortierter Bereich ist eine Vorbedingung der Verwendung von upper_bound und wo Sortierkriterium dasselbe wie durch das binäre Prädikat angegeben ist.
Der Bereich wird nicht von upper_bound geändert.
Die Werttypen der Vorwärtsiteratoren müssen weniger-als vergleichbar sein, sortiert werden, sodass, zwei Elemente angegeben wurde, es jedem bestimmt werden kann, dass sie äquivalent sind (insofern, dass kein kleiner ist als die andere ist), oder dass ein kleiner als das andere ist.Dies ergibt eine Reihenfolge zwischen den Elementen antivalenten
Die Komplexität des Algorithmus ist logarithmisch für Iteratoren mit wahlfreier Zugriff und andernfalls, mit der Anzahl der Schritte linear, die proportional zu sind (_Last1 - _First1).
Beispiel
// 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;
}
Anforderungen
Header: <algorithm>
Namespace: std