equal.h 652 B

12345678910111213141516171819202122232425262728
  1. //
  2. // equal.h
  3. // stream
  4. //
  5. // Created by Sam Jaffe on 4/2/23.
  6. //
  7. #pragma once
  8. #include <algorithm>
  9. namespace stream::range {
  10. template <typename It1, typename S1, typename It2, typename S2,
  11. typename Cmp = std::equal_to<>>
  12. bool equal(It1 it1, S1 end1, It2 it2, S2 end2, Cmp cmp = {}) {
  13. for (; it1 != end1 && it2 != end2; ++it1, ++it2) {
  14. if (!std::invoke(cmp, *it1, *it2)) { return false; }
  15. }
  16. return (it1 != end1) == (it2 != end2);
  17. }
  18. template <typename S1, typename S2, typename Cmp = std::equal_to<>>
  19. bool equal(S1 const s1, S2 const & s2, Cmp cmp = {}) {
  20. return equal(s1.begin(), s1.end(), s2.begin(), s2.end(), cmp);
  21. }
  22. }