equal_range
정렬된 범위 지정 된 모든 요소에 지정 된 값에 해당 하는 하위 범위를 찾습니다.
template<class ForwardIterator, class Type>
pair<ForwardIterator, ForwardIterator> equal_range(
ForwardIterator first,
ForwardIterator last,
const Type& val
);
template<class ForwardIterator, class Type, class Predicate>
pair<ForwardIterator, ForwardIterator> equal_range(
ForwardIterator first,
ForwardIterator last,
const Type& val,
Predicate comp
);
매개 변수
first
검색할 주소 범위의 첫 번째 요소의 위치는 정방향 반복기입니다.last
검색할 위치 하나 과거 최종 요소 범위에 있는 주소는 정방향 반복기입니다.val
순서가 지정 된 범위에서 검색 되는 값입니다.comp
한 요소가 다른 보다 작은 것이 정의 조건자 함수의 사용자 정의 개체입니다.
반환 값
모든 요소는 동일한 검색, 범위 내에 포함 된 하위 범위, 지정 정방향 반복기 쌍 val 사용 하는 이진 조건자에 정의 된 의미에서 (어느 comp 또는 기본값을 덜-보다).
범위에 있는 요소에 해당 하는 경우 val, 정방향 반복기의 반환 된 쌍 동등 하며 점을 지정 위치 val 범위의 순서에 영향을 주지 않고 삽입할 수 없습니다.
설명
첫 번째 반복기가 알고리즘에 의해 반환 된 쌍의 lower_bound, 및 두 번째 반복기는 upper_bound.
제공 하는 조건자에 따라 범위가 정렬 되어야 합니다 equal_range.예를 들어, 보다 큼 하려면-조건자 보다 범위는 내림차순으로 정렬 합니다.
요소를 반환 하는 반복기 쌍에 의해 정의 가능한 빈 하위 범위의 equal_range 수에 해당 하는 val 에 사용 된 조건자에 정의 된 것이.
임의 액세스 반복기에 대 한 로그 및 선형 비례 하는 단계 수와 그렇지 않은 경우 알고리즘의 복잡도 (last - first).
예제
// alg_equal_range.cpp
// compile with: /EHsc
#include <vector>
#include <algorithm>
#include <functional> //For greater<int>()
#include <iostream>
#include <string>
using namespace std;
template<class T> void dump_vector( const vector<T>& v, pair< typename vector<T>::iterator, typename vector<T>::iterator > range )
{
// prints vector v with range delimited by [ and ]
for( typename vector<T>::const_iterator i = v.begin(); i != v.end(); ++i )
{
if( i == range.first )
{
cout << "[ ";
}
if( i == range.second )
{
cout << "] ";
}
cout << *i << " ";
}
cout << endl;
}
template<class T> void equal_range_demo( const vector<T>& original_vector, T val )
{
vector<T> v(original_vector);
sort( v.begin(), v.end() );
cout << "Vector sorted by the default binary predicate <:" << endl << '\t';
for( vector<T>::const_iterator i = v.begin(); i != v.end(); ++i )
{
cout << *i << " ";
}
cout << endl << endl;
pair< vector<T>::iterator, vector<T>::iterator > result
= equal_range( v.begin(), v.end(), val );
cout << "Result of equal_range with val = " << val << ":" << endl << '\t';
dump_vector( v, result );
cout << endl;
}
template<class T, class F> void equal_range_demo( const vector<T>& original_vector, T val, F pred, string predname )
{
vector<T> v(original_vector);
sort( v.begin(), v.end(), pred );
cout << "Vector sorted by the binary predicate " << predname << ":" << endl << '\t';
for( typename vector<T>::const_iterator i = v.begin(); i != v.end(); ++i )
{
cout << *i << " ";
}
cout << endl << endl;
pair< typename vector<T>::iterator, typename vector<T>::iterator > result
= equal_range( v.begin(), v.end(), val, pred );
cout << "Result of equal_range with val = " << val << ":" << endl << '\t';
dump_vector( v, result );
cout << endl;
}
// Return whether absolute value of elem1 is less than absolute value of elem2
bool abs_lesser( int elem1, int elem2 )
{
return abs(elem1) < abs(elem2);
}
// Return whether string l is shorter than string r
bool shorter_than(const string& l, const string& r)
{
return l.size() < r.size();
}
int main()
{
vector<int> v1;
// Constructing vector v1 with default less than ordering
for( int i = -1; i <= 4; ++i )
{
v1.push_back(i);
}
for( int i =-3; i <= 0; ++i )
{
v1.push_back( i );
}
equal_range_demo( v1, 3 );
equal_range_demo( v1, 3, greater<int>(), "greater" );
equal_range_demo( v1, 3, abs_lesser, "abs_lesser" );
vector<string> v2;
v2.push_back("cute");
v2.push_back("fluffy");
v2.push_back("kittens");
v2.push_back("fun");
v2.push_back("meowmeowmeow");
v2.push_back("blah");
equal_range_demo<string>( v2, "fred" );
equal_range_demo<string>( v2, "fred", shorter_than, "shorter_than" );
}
요구 사항
헤더: <algorithm>
네임 스페이스: std