equal_range
Dané oblasti objednané najde Podrozsah sady, ve kterém jsou všechny prvky odpovídající dané hodnoty.
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
);
Parametry
first
Předávání iterační adresování pozici první prvek v rozsahu mají být prohledány.last
Dopředu iterační adresování pozice jeden za poslední prvek v rozsahu mají být prohledány.val
Hodnota vyhledáván zadaného rozsahu.comp
Uživatelem definované funkce predikátu objektu, který definuje smysl, ve kterém jeden prvek je menší než jiné.
Vrácená hodnota
Dvojice iterátorů vpřed určující Podrozsah, obsaženy v oblasti prohledány, v nichž jsou všechny prvky rovnocenné val ve smyslu definice binárního predikátu používá (buď comp nebo výchozí méně-než).
Pokud jsou rovnocenné žádné prvky v oblasti val, vrácené dvojice dopředu u iterátorů rovnají a určete bod kde val by vložen bez narušení pořadí rozsahu.
Poznámky
První iterace pár vrátil algoritmu je lower_bound, a druhé iterace je upper_bound.
Rozsah musí být seřazeny podle predikát poskytované equal_range.Například pokud se chystáte použít vyšší-než predikát, musí být rozsah seřazeny v sestupném pořadí.
Prvky pravděpodobně prázdná Podrozsah definované dvojice iterátorů vrácené equal_range odpovídá val ve smyslu definice predikát používá.
Složitost algoritmu je pro náhodný přístup u iterátorů logaritmické a jinak s počet kroků úměrné lineární (last – first).
Příklad
// 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" );
}
Požadavky
Záhlaví: <algorithm>
Obor názvů: std