Алгоритм equal_range()
Алгоритм equal_range()
template class ForwardIterator, class Type
pair ForwardIterator, ForwardIterator
equal_range( ForwardIterator first,
ForwardIterator last, const Type &value );
template class ForwardIterator, class Type, class Compare
pairForwardIterator, ForwardIterator
equal_range( ForwardIterator first,
ForwardIterator last, const Type &value,
Compare comp );
equal_range() возвращает пару итераторов: первый представляет значение итератора, возвращаемое алгоритмом lower_bound(), второй - алгоритмом upper_bound(). (О семантике этих алгоритмов рассказано в их описаниях.) Например, дана последовательность:
int ia[] = {12,15,17,19,20,22,23,26,29,35,40,51};
Обращение к equal_range() со значением 21 возвращает пару итераторов, в которой оба указывают на значение 22. Обращение же со значением 22 возвращает пару итераторов, где first указывает на 22, а second - на 23. В первом варианте при сравнении используется оператор "меньше", определенный для типа элементов контейнера; во втором - предикат comp.
#include algorithm
#include vector
#include utility
#include iostream.h
/* печатается:
последовательность элементов массива после сортировки:
12 15 17 19 20 22 23 26 29 35 40 51
результат equal_range при поиске значения 23:
*ia_iter.first: 23 *ia_iter.second: 26
результат equal_range при поиске отсутствующего значения 21:
*ia_iter.first: 22 *ia_iter.second: 22
последовательность элементов вектора после сортировки:
51 40 35 29 26 23 22 20 19 17 15 12
результат equal_range при поиске значения 26:
*ivec_iter.first: 26 *ivec_iter.second: 23
результат equal_range при поиске отсутствующего значения 21:
*ivec_iter.first: 20 *ivec_iter.second: 20
*/
int main()
{
int ia[] = { 29,23,20,22,17,15,26,51,19,12,35,40 };
vector int, allocator ivec( ia, ia+12 );
ostream_iterator int ofile( cout, " " );
sort( &ia[0], &ia[12] );
cout "последовательность элементов массива после сортировки: ";
copy( ia, ia+12, ofile ); cout " ";
pair int*,int* ia_iter;
ia_iter = equal_range( &ia[0], &ia[12], 23 );
cout "результат equal_range при поиске значения 23: "
"*ia_iter.first: " *ia_iter.first " "
"*ia_iter.second: " *ia_iter.second " ";
ia_iter = equal_range( &ia[0], &ia[12], 21 );
cout "результат equal_range при поиске "
"отсутствующего значения 21: "
"*ia_iter.first: " *ia_iter.first " "
"*ia_iter.second: " *ia_iter.second " ";
sort( ivec.begin(), ivec.end(), greaterint() );
cout "последовательность элементов вектора после сортировки: ";
copy( ivec.begin(), ivec.end(), ofile ); cout " ";
typedef vector int, allocator ::iterator iter_ivec;
pair iter_ivec, iter_ivec ivec_iter;
ivec_iter = equal_range( ivec.begin(), ivec.end(), 26,
greaterint() );
cout "результат equal_range при поиске значения 26: "
"*ivec_iter.first: " *ivec_iter.first " "
"*ivec_iter.second: " *ivec_iter.second
" ";
ivec_iter = equal_range( ivec.begin(), ivec.end(), 21,
greaterint() );
cout "результат equal_range при поиске отсутствующего значения 21: "
"*ivec_iter.first: " *ivec_iter.first " "
"*ivec_iter.second: " *ivec_iter.second
" ";
}
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
8.1.1 Алгоритм
8.1.1 Алгоритм Сразу после переключения контекста ядро запускает алгоритм планирования выполнения процессов (Рисунок 8.1), выбирая на выполнение процесс с наивысшим приоритетом среди процессов, находящихся в состояниях "резервирования" и "готовности к выполнению, будучи
Совет 45. Различайте алгоритмы count, find, binary_search, lower_bound, upper_bound и equal_range
Совет 45. Различайте алгоритмы count, find, binary_search, lower_bound, upper_bound и equal_range Предположим, вы ищете некоторый объект в контейнере или в интервале, границы которого обозначены итераторами. Как это сделать? В вашем распоряжении целый арсенал алгоритмов: count, find, binary_search, lower_bound, upper_bound и
Алгоритм lexicographical_compare()
Алгоритм lexicographical_compare() template class InputIterator1, class InputIterator2 boollexicographical_compare(InputIterator1 first1, InputIterator1 last1,InputIterator1 first2, InputIterator2 last2 );template class InputIterator1, class InputIterator2,class Compare boollexicographical_compare(InputIterator1 first1, InputIterator1 last1,InputIterator1 first2, InputIterator2 last2,Compare comp );lexicographical_compare() сравнивает соответственные пары
Алгоритм lower_bound()
Алгоритм lower_bound() template class ForwardIterator, class Type ForwardIteratorlower_bound( ForwardIterator first,ForwardIterator last, const Type &value );template class ForwardIterator, class Type, class Compare ForwardIteratorlower_bound( ForwardIterator first,ForwardIterator last, const Type &value,class Compare );lower_bound() возвращает итератор, указывающий на первую позицию в отсортированной
Алгоритм max()
Алгоритм max() template class Type const Type&max( const Type &aval, const Type &bval );template class Type, class Compare const Type&max( const Type &aval, const Type &bval, Compare comp );max() возвращает наибольшее из двух значений aval и bval. В первом варианте используется оператор "больше", определенный в классе Type; во втором - операция
Алгоритм min()
Алгоритм min() template class Type const Type&min( const Type &aval, const Type &bval );template class Type, class Compare const Type&min( const Type &aval, const Type &bval, Compare comp );min() возвращает меньшее из двух значений aval и bval. В первом варианте используется оператор “меньше”, определенный для типа Type; во втором - операция
Алгоритм merge()
Алгоритм merge() template class InputIterator1, class InputIterator2,class OutputIterator OutputIteratormerge( InputIterator1 first1, InputIterator1 last1,InputIterator2 first2, InputIterator2 last2,OutputIterator result );template class InputIterator1, class InputIterator2,class OutputIterator, class Compare OutputIteratormerge( InputIterator1 first1, InputIterator1 last1,InputIterator2 first2, InputIterator2 last2,OutputIterator result, Compare comp );merge() объединяет
Алгоритм mismatch()
Алгоритм mismatch() template class InputIterator1, class InputIterator2 pairInputIterator1, InputIterator2mismatch( InputIterator1 first,InputIterator1 last, InputIterator2 first2 );template class InputIterator1, class InputIterator2,class BinaryPredicate pairInputIterator1, InputIterator2mismatch( InputIterator1 first, InputIterator1 last,InputIterator2 first2, BinaryPredicate pred );mismatch() сравнивает две последовательности и находит
Алгоритм nth_element()
Алгоритм nth_element() template class RandomAccessIterator voidnth_element( RandomAccessIterator first,RandomAccessIterator nth,RandomAccessIterator last );template class RandomAccessIterator, class Compare voidnth_element( RandomAccessIterator first,RandomAccessIterator nth,RandomAccessIterator last, Compare comp );nth_element() переупорядочивает последовательность, ограниченную диапазоном [first,last), так что все
Алгоритм partial_sort()
Алгоритм partial_sort() template class RandomAccessIterator voidpartial_sort( RandomAccessIterator first,RandomAccessIterator middle,RandomAccessIterator last );templatepartial_sort() сортирует часть последовательности, укладывающуюся в диапазон [first,middle). Элементы в диапазоне [middle,last) остаются неотсортированными. Например, если дан массивint ia[] =
Алгоритм partial_sum()
Алгоритм partial_sum() template class InputIterator, class OutputIterator OutputIteratorpartial_sum(InputIterator first, InputIterator last,OutputIterator result );template class InputIterator, class OutputIterator,class BinaryOperation OutputIteratorpartial_sum(InputIterator first, InputIterator last,OutputIterator result, BinaryOperation op );Первый вариант partial_sum() создает из последовательности, ограниченной
Алгоритм partition()
Алгоритм partition() template class BidirectionalIterator, class UnaryPredicate BidirectionalIteratorpartition(BidirectionalIterator first,BidirectionalIterator last, UnaryPredicate pred );partition() переупорядочивает элементы в диапазоне [first,last). Все элементы, для которых предикат pred равен true, помещаются перед элементами, для которых он равен false.
Алгоритм random_shuffle()
Алгоритм random_shuffle() template class RandomAccessIterator voidrandom_shuffle( RandomAccessIterator first,RandomAccessIterator last );template class RandomAccessIterator,class RandomNumberGenerator voidrandom_shuffle( RandomAccessIterator first,RandomAccessIterator last,RandomNumberGenerator rand);random_shuffle() переставляет элементы из диапазона [first,last) в случайном порядке. Во втором варианте можно