Daily bit(e) C++. std::equal_range
Добавлено3 августа 2023 в 19:57
Daily bit(e) C++ #1, std::equal_range
, появился в C++98.

Алгоритм std::equal_range
– это алгоритм бинарного поиска (O(logn) сравнений), который работает с отсортированными диапазонами.
Он возвращает нижнюю и верхнюю границы для заданного значения, эффективно обозначая диапазон элементов, равных этому значению.
Как обычно в C++, пустой диапазон обозначается двумя итераторами, равными друг другу.
#include <iostream>
#include <algorithm>
#include <vector>
int main()
{
std::vector<int> data{1, 2, 3, 4, 4, 4, 6, 7, 8, 9, 10};
{
auto [begin, end] = std::equal_range(data.begin(), data.end(), 4);
// [begin, end) == {4, 4, 4}
for (auto it = begin; it != end; ++it)
{
std::cout << *it << ", ";
}
std::cout << "\n";
}
{
auto [begin, end] = std::equal_range(data.begin(), data.end(), 5);
// begin == end (пустой диапазон)
for (auto it = begin; it != end; ++it)
{
std::cout << *it << ", ";
}
std::cout << "\n";
}
}
Открыть пример на Compiler Explorer.