Namespaces
Variants

std::flat_multiset<Key,Compare,KeyContainer>:: equal_range

From cppreference.net

std:: pair < iterator, iterator > equal_range ( const Key & key ) ;
(1) (начиная с C++23)
(constexpr начиная с C++26)
std:: pair < const_iterator, const_iterator >
equal_range ( const Key & key ) const ;
(2) (начиная с C++23)
(constexpr начиная с C++26)
template < class K >
std:: pair < iterator, iterator > equal_range ( const K & x ) ;
(3) (начиная с C++23)
(constexpr начиная с C++26)
template < class K >

std:: pair < const_iterator, const_iterator >

equal_range ( const K & x ) const ;
(4) (начиная с C++23)
(constexpr начиная с C++26)

Возвращает диапазон, содержащий все элементы с заданным ключом в контейнере. Диапазон определяется двумя итераторами: один указывает на первый элемент, который не меньше заданного ключа, а другой - на первый элемент, больший заданного ключа.

В качестве альтернативы, первый итератор может быть получен с помощью lower_bound() , а второй — с помощью upper_bound() .

1,2) Сравнивает ключи с key .
3,4) Сравнивает ключи со значением x .
Эта перегрузка участвует в разрешении перегрузки только если Compare является прозрачным . Это позволяет вызывать данную функцию без создания экземпляра Key .

Содержание

Параметры

key - значение ключа для сравнения с элементами
x - альтернативное значение, которое можно сравнить с Key

Возвращаемое значение

std::pair содержащий пару итераторов, определяющих требуемый диапазон:

  • Первый итератор указывает на первый элемент, не меньший заданного ключа, или на end ( ) если такой элемент не существует.
  • Второй итератор указывает на первый элемент, больший заданного ключа, или на end ( ) если такой элемент не существует.

Поскольку emplace и неуказанная вставка insert всегда выполняются в верхней границе, порядок эквивалентных элементов в равном диапазоне соответствует порядку вставки, если только не использовалась указанная вставка insert или emplace_hint для вставки элемента в другую позицию.

Сложность

Логарифмическая от размера контейнера.

Пример

#include <iostream>
#include <flat_set>
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::flat_multiset<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 3 3 4 )
key = 0; equal range = [ ) 1 2 3 3 3 4
key = 1; equal range = [ 1 ) 2 3 3 3 4
key = 2; equal range = 1 [ 2 ) 3 3 3 4
key = 3; equal range = 1 2 [ 3 3 3 ) 4
key = 4; equal range = 1 2 3 3 3 [ 4 )
key = 5; equal range = 1 2 3 3 3 4 [ )

Смотрите также

находит элемент с указанным ключом
(public member function)
проверяет, содержит ли контейнер элемент с указанным ключом
(public member function)
возвращает количество элементов, соответствующих указанному ключу
(public member function)
возвращает итератор на первый элемент больший чем заданный ключ
(public member function)
возвращает итератор на первый элемент не меньший чем заданный ключ
(public member function)
возвращает диапазон элементов, соответствующих указанному ключу
(function template)