std::set<Key,Compare,Allocator>::equal_range
std::pair<iterator,iterator> equal_range( const Key& key ); |
(1) | |
std::pair<const_iterator,const_iterator> equal_range( const Key& key ) const; |
(2) | |
template< class K > std::pair<iterator,iterator> equal_range( const K& x ); |
(3) | (с C++14) |
template< class K > std::pair<const_iterator,const_iterator> equal_range( const K& x ) const; |
(4) | (с C++14) |
Возвращает диапазон, содержащий все элементы с заданным ключом в контейнере. Диапазон определяется двумя итераторами, один из которых указывает на первый элемент, который не меньше чем key, а другой — на первый элемент, больший чем key. В качестве альтернативы, первый итератор может быть получен с помощью lower_bound(), а второй — с помощью upper_bound().
key.x. Эта перегрузка участвует в разрешении перегрузки только в том случае, если квалифицированный идентификатор Compare::is_transparent действителен и обозначает тип. Это позволяет вызывать эту функцию без создания экземпляра Key.Параметры
| key | - | значение ключа для сравнения с элементами |
| x | - | альтернативное значение, которое может быть сравнено с Key |
Значение результата
std::pair, содержащий пару итераторов, определяющих желаемый диапазон: первый, указывающий на первый элемент, который не меньше чем key, и второй, указывающий на первый элемент, больше чем key.
Если элементов, не меньших чем key, нет, возвращается итератор, указывающий на конец (см. end()) как первый элемент. Аналогично, если элементов, больших чем key, нет, возвращается итератор, указывающий на конец, как второй элемент.
Сложность
Логарифмическая по отношению к размеру контейнера.
Примечания
| Макроинструкция проверки поддержки функции | Значение | Стандарт | Функция |
|---|---|---|---|
__cpp_lib_generic_associative_lookup |
201304L | (C++14) | Поиск с гетерогенным сравнением, (3,4) |
Пример
#include <set>
#include <iostream>
template<typename I>
void print_equal_range(I first, I lb, I ub, I last)
{
for (I i{first}; i != lb; ++i)
std::cout << *i << ' ';
std::cout << "[ ";
for (I i{lb}; i != ub; ++i)
std::cout << *i << ' ';
std::cout << ") ";
for (I i{ub}; i != last; ++i)
std::cout << *i << ' ';
std::cout << '\n';
}
int main()
{
std::set<int> c{4, 3, 2, 1, 3, 3};
std::cout << "c = ";
print_equal_range(begin(c), begin(c), end(c), end(c));
for (int key{}; key != 6; ++key)
{
std::cout << "key = " << key << "; equal range = ";
const auto [lb, ub] = c.equal_range(key);
print_equal_range(begin(c), lb, ub, end(c));
}
}Вывод:
c = [ 1 2 3 4 ) key = 0; equal range = [ ) 1 2 3 4 key = 1; equal range = [ 1 ) 2 3 4 key = 2; equal range = 1 [ 2 ) 3 4 key = 3; equal range = 1 2 [ 3 ) 4 key = 4; equal range = 1 2 3 [ 4 ) key = 5; equal range = 1 2 3 4 [ )
См. также
| находит элемент со специфическим ключом (публичный член-функция) |
|
|
(C++20) |
проверяет, содержит ли контейнер элемент со специфическим ключом (публичный член-функция) |
| возвращает количество элементов, соответствующих заданному ключу (публичный член-функция) |
|
| возвращает итератор на первый элемент, больший заданного ключа (публичный член-функция) |
|
| возвращает итератор на первый элемент, не меньший заданного ключа (публичный член-функция) |
|
| возвращает диапазон элементов, соответствующих заданному ключу (шаблонная функция) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/container/set/equal_range