upper_bound
이진 조건자에 정렬 기준 위치 지정할 수는 지정한 값 보다 큰 값은 정렬 된 범위에서 첫 번째 요소의 위치를 찾습니다.
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
);
매개 변수
_First
검색할 범위의 첫 번째 요소의 위치입니다._Last
위치 하나 과거 최종 요소 검색 범위입니다._Val
반복기가 반환 주소가 지정 된 요소의 값을 초과 하는 데 필요한 정렬된 범위 값입니다._Comp
한 요소가 다른 보다 작은 것이 정의 조건자 함수의 사용자 정의 개체입니다.두 인수를 사용 하 고 반환 하는 이진 술 부 true 만족 스 러 우면 및 거짓 만족 하지 않을 때.
반환 값
정방향 반복기 값이 지정한 값 보다 큰 첫 번째 요소의 위치입니다.
설명
정렬 된 원본 범위 참조 유효 해야 합니다. 모든 반복기는 dereferenceable 이어야 하며 시퀀스에서 마지막 위치에서 첫 번째 접근할 수 여 증분 합니다.
정렬 된 범위를 사용 하려면 먼저입니다 upper_bound 및 위치 정렬 조건 동일 이진 조건자에 지정 된.
범위에서 수정 되지 않습니다 upper_bound.
정방향 반복기 값 유형의 작을 해야-비교 보다 주문 두 요소로 지정 되도록 (둘 다 다른 보다 의미)에 해당 하는 나 보다 다른 인지 확인할 수 있습니다.이 결과 nonequivalent 요소 간의 순서
임의 액세스 반복기에 대 한 로그 및 선형 비례 하는 단계 수와 그렇지 않은 경우 알고리즘의 복잡도 (_Last1-_First1).
예제
// 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;
}
요구 사항
헤더: <algorithm>
네임 스페이스: std