Namespaces
Variants

std::flat_map<Key,T,Compare,KeyContainer,MappedContainer>:: 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 ( ) если такой элемент не существует.

Сложность

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

Пример

#include <iostream>
#include <flat_map>
int main()
{
    const std::flat_map<int, const char*> m
    {
        {0, "zero"},
        {1, "one"},
        {2, "two"}
    };
    auto p = m.equal_range(1);
    for (auto& q = p.first; q != p.second; ++q)
        std::cout << "m[" << q->first << "] = " << q->second << '\n';
    if (p.second == m.find(2))
        std::cout << "end of equal_range (p.second) is one-past p.first\n";
    else
        std::cout << "unexpected; p.second expected to be one-past p.first\n";
    auto pp = m.equal_range(-1);
    if (pp.first == m.begin())
        std::cout << "pp.first is iterator to first not-less than -1\n";
    else
        std::cout << "unexpected pp.first\n";
    if (pp.second == m.begin())
        std::cout << "pp.second is iterator to first element greater-than -1\n";
    else
        std::cout << "unexpected pp.second\n";
    auto ppp = m.equal_range(3);
    if (ppp.first == m.end())
        std::cout << "ppp.first is iterator to first not-less than 3\n";
    else
        std::cout << "unexpected ppp.first\n";
    if (ppp.second == m.end())
        std::cout << "ppp.second is iterator to first element greater-than 3\n";
    else
        std::cout << "unexpected ppp.second\n";
}

Вывод:

m[1] = one
end of equal_range (p.second) is one-past p.first
pp.first is iterator to first not-less than -1
pp.second is iterator to first element greater-than -1
ppp.first is iterator to first not-less than 3
ppp.second is iterator to first element greater-than 3

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

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