std::flat_map<Key,T,Compare,KeyContainer,MappedContainer>:: equal_range
|
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
>
|
(4) |
(начиная с C++23)
(constexpr начиная с C++26) |
Возвращает диапазон, содержащий все элементы с заданным ключом в контейнере. Диапазон определяется двумя итераторами: один указывает на первый элемент, который не меньше заданного ключа, а другой указывает на первый элемент, больший заданного ключа.
В качестве альтернативы, первый итератор может быть получен с помощью lower_bound() , а второй - с помощью upper_bound() .
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) |