std::equal_range
![]() |
Эта страница была переведена автоматически с английской версии вики используя Переводчик Google. Перевод может содержать ошибки и странные формулировки. Наведите курсор на текст, чтобы увидеть оригинал. Щёлкните здесь, чтобы увидеть английскую версию этой страницы. (Вы можете помочь в исправлении ошибок и улучшении перевода. Д��я инструкций перейдите по ссылке.) |
Определено в заголовочном файле <algorithm>
|
||
template< class ForwardIt, class T > std::pair<ForwardIt,ForwardIt> |
(1) | |
template< class ForwardIt, class T, class Compare > std::pair<ForwardIt,ForwardIt> |
(2) | |
value
в отсортированном диапазоне [first, last)
. Диапазон определяется двумя итераторами, первый указывает на первый элемент не меньший (равный или больше), чем value
, второй указывает на первый элемент больший, чем value
. Первый итератор может быть получен использованием lower_bound()
, второй - upper_bound()
.value
in the sorted range [first, last)
. The range is defined by two iterators, one pointing to the first element that is not less than value
and another pointing to the first element greater than value
. The first iterator may be alternatively obtained with lower_bound()
, the second - with upper_bound()
.Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
comp
.comp
.Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Содержание |
[править] Параметры
first, last | — | диапазон элементов для изучения
Оригинал: the range of elements to examine Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. |
value | — | Значение для сравнения элементов
Оригинал: value to compare the elements to Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. |
comp | — | объект функции сравнения (т.е. объект, удовлетворяющий требованиям Compare), который возвращает true, если первый аргумент "меньше", чем второй. Определение сравнения должно быть эквивалентно: bool cmp(const Type1 &a, const Type2 &b); Использование noexcept (начиная с C++11) желательно но не обязательно. Параметры не обязаны передаваться по const&, но не должны модифицироваться. Они должны быть способны принимать все значения типа (даже const) |
Требования к типам | ||
-ForwardIt должен соответствовать требованиям ForwardIterator .
|
[править] Возвращаемое значение
value
, второй указывает на первый элемент больше, чем value
. value
and the second pointing to the first element greater than value
. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
value
, last
возвращается в качестве первого элемента. Аналогично, если нет элементов больше, чем value
, last
возвращается в качестве второго элементаvalue
, last
is returned as the first element. Similarly if there are no elements greater than value
, last
is returned as the second elementВы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
[править] Сложность
first
и last
first
and last
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
[править] Возможная реализация
Первый вариант |
---|
template<class ForwardIt, class T std::pair<ForwardIt,ForwardIt> equal_range(ForwardIt first, ForwardIt last, const T& value) { return std::make_pair(std::lower_bound(first, last, value), std::upper_bound(first, last, value)); } |
Второй вариант |
template<class ForwardIt, class T, class Compare> std::pair<ForwardIt,ForwardIt> equal_range(ForwardIt first, ForwardIt last, const T& value, Compare comp); { return std::make_pair(std::lower_bound(first, last, value, comp), std::upper_bound(first, last, value, comp)); } |
[править] Пример
#include <algorithm> #include <vector> #include <iostream> struct S { int number; char name; S ( int number, char name ) : number ( number ), name ( name ) {} // only the number is relevant with this comparison bool operator< ( const S& s ) const { return number < s.number; } }; int main() { std::vector<S> vec = { {1,'A'}, {2,'B'}, {2,'C'}, {2,'D'}, {3,'F'}, {4,'G'} }; S value ( 2, '?' ); auto p = std::equal_range(vec.begin(),vec.end(),value); for ( auto i = p.first; i != p.second; ++i ) std::cout << i->name << ' '; }
Вывод:
B C D
[править] См. также
возвращает итератор на первый элемент не меньший, чем заданное значение (шаблон функции) | |
возвращает итератор на первый элемент, который больше определённого значения (шаблон функции) | |
определяет, существует ли элемент в частично упорядоченном диапазоне (шаблон функции) |