Spec-Zone.ru › C++

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().

1,2) Сравнивает ключи с key.
3,4) Сравнивает ключи со значением 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 [ )

См. также

find
находит элемент со специфическим ключом
(публичный член-функция)
contains
(C++20)
проверяет, содержит ли контейнер элемент со специфическим ключом
(публичный член-функция)
count
возвращает количество элементов, соответствующих заданному ключу
(публичный член-функция)
upper_bound
возвращает итератор на первый элемент, больший заданного ключа
(публичный член-функция)
lower_bound
возвращает итератор на первый элемент, не меньший заданного ключа
(публичный член-функция)
equal_range
возвращает диапазон элементов, соответствующих заданному ключу
(шаблонная функция)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/container/set/equal_range

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API