std::equal_range
|
|
Эта страница была переведена автоматически с английской версии вики используя Переводчик Google. Перевод может содержать ошибки и странные формулировки. Наведите курсор на текст, чтобы увидеть оригинал. Щёлкните здесь, чтобы увидеть английскую версию этой страницы. (Вы можете помочь в исправлении ошибок и улучшении перевода. Для инструкций перейдите по ссылке.) |
<metanoindex/>
<tbody> </tbody>| Определено в заголовочном файле <algorithm>
|
||
template< class ForwardIt, class T > std::pair<ForwardIt,ForwardIt> equal_range( ForwardIt first, ForwardIt last, const T& value ); |
(1) | |
template< class ForwardIt, class T, class Compare > std::pair<ForwardIt,ForwardIt> equal_range( ForwardIt first, ForwardIt last, const T& value, Compare comp ); |
(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().Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
operator<, второй вариант использует передаваемую функцию сравнения comp.operator< to compare the elements, the second version uses the given comparison function comp.Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Параметры
| first, last | — | диапазон элементов для изучения
Оригинал: the range of elements to examine Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. |
| value | — | Значение для сравнения элементов
Оригинал: value to compare the elements to Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. |
| comp | — | объект функции сравнения (т.е. объект, удовлетворяющий требованиям Compare), который возвращает true, если первый аргумент "меньше", чем второй.Определение сравнения должно быть эквивалентно:
Использование |
| Требования к типам | ||
-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 и lastfirst 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
См. также
| возвращает итератор на первый элемент не меньший, чем заданное значение (шаблон функции) | |
| возвращает итератор на первый элемент, который больше определённого значения (шаблон функции) | |
| определяет, существует ли элемент в частично упорядоченном диапазоне (шаблон функции) |