std::ranges::equal
Актуально для C++26.
#include <algorithm>
Актуально на 2025-06-02.
Define overload #1
template<std::input_iterator I1, std::sentinel_for<I1> S1, std::input_iterator I2, std::sentinel_for<I2> S2, class Pred = ranges::equal_to, class Proj1 = std::identity, class Proj2 = std::identity> requires std::indirectly_comparable<I1, I2, Pred, Proj1, Proj2> constexpr bool equal(I1 first1, S1 last1, I2 first2, S2 last2, Pred pred = {}, Proj1 proj1 = {}, Proj2 proj2 = {});
Сравнивает диапазон [first1, last1] с диапазоном [first2, last2].
Example, possible implementation
Define overload #2
template<ranges::input_range R1, ranges::input_range R2, class Pred = ranges::equal_to, class Proj1 = std::identity, class Proj2 = std::identity> requires std::indirectly_comparable<ranges::iterator_t<R1>, ranges::iterator_t<R2>, Pred, Proj1, Proj2> constexpr bool equal(R1&& r1, R2&& r2, Pred pred = {}, Proj1 proj1 = {}, Proj2 proj2 = {});
Сравнивает диапазон "r1" с диапазоном "r2".
Example, possible implementation
Notes
- В целях оптимизации производительности, сначала сравнивается длина диапазонов, если это возможно.
- Сравнение диапазонов осуществляется с начала.
Возвращаемое значение
Вернёт true если они равны, иначе, false.
Сложность
Линейная = O(n), n = min(last1 - first1, last2 - first2).
Examples
Example 1:
#include <iostream> #include <algorithm> #include <string> namespace ranges = std::ranges; int main() { std::string str1{"ABCDEFGHIJK"}; std::string str2{"abcdefghijk"}; auto pred = [](unsigned char c) { return std::tolower(c); }; auto result = ranges::equal(str1, str2, ranges::equal_to{}, pred); if (result) { std::cout << "range is equivalent" << std::endl; } else { std::cout << "range is not equivalent" << std::endl; } }
range is equivalent
Changelog
C++20
Введён в стандарт.See also
TODO
This page was last modified on 2025-06-02