Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Dado un intervalo orden, busque el subrango en el que todos los elementos son equivalentes a un valor especificado.
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
);
Parámetros
first
Un iterador hacia delante que dirige la posición del primer elemento del intervalo que se buscará.last
Un iterador hacia delante que dirige la posición una más allá del último elemento en el intervalo que se buscará.val
El valor que está buscando en el intervalo petición.comp
Objeto definido por el usuario de la función de predicado en el que define el sentido que un elemento es menor que otro.
Valor devuelto
Un par de iteradores hacia delante que especifican un subrango, contenido dentro del intervalo de búsqueda, en el que todos los elementos son equivalentes a val en el sentido definidas por el predicado binario utiliza ( comp o predeterminado, que).
Si no hay elementos en el intervalo equivalentes a val, los pares devueltos de iteradores hacia delante son iguales y especifican el punto donde val podría incrustar sin perturbar el orden del intervalo.
Comentarios
El primer iterador de pares devueltos por el algoritmo es lower_bound, y el segundo iterador es upper_bound.
El intervalo se debe ordenar según el predicado proporcionado a equal_range.Por ejemplo, si va a utilizar mayor predicado, se debe ordenar en orden descendente.
Los elementos del subrango posiblemente vacío definido por los pares de iteradores devueltos por equal_range se equivalentes a val en el sentido definidas por el predicado utilizado.
La complejidad del algoritmo es logarítmica para iteradores de acceso aleatorio y lineal de otra manera, con el número de pasos proporcional a (last – first).
Ejemplo
// 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" );
}
Requisitos
encabezado: <algoritmo>
espacio de nombres: std