Daily bit(e) C++. std::equal_range

Добавлено 3 августа 2023 в 19:57

Daily bit(e) C++ #1, std::equal_range, появился в C++98.

Daily bit(e) C++. std::equal_range

Алгоритм 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.

Теги

C++ / CppDaily bit(e) C++STL / Standard Template Library / Стандартная библиотека шаблоновПрограммирование

На сайте работает сервис комментирования DISQUS, который позволяет вам оставлять комментарии на множестве сайтов, имея лишь один аккаунт на Disqus.com.

В случае комментирования в качестве гостя (без регистрации на disqus.com) для публикации комментария требуется время на премодерацию.