Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
std::experi...es::mismatch(3) C++ Standard Libarystd::experi...es::mismatch(3)

NAME
       std::experimental::ranges::mismatch  -  std::experimental::ranges::mis-
       match

Synopsis
	  Defined in header <experimental/ranges/algorithm>
	  template< InputIterator I1, Sentinel<I1> S1, InputIterator I2,
	  Sentinel<I2> S2,

	  class	Proj1 =	ranges::identity, class	Proj2 =	ranges::identity,
	  class	Pred = ranges::equal_to<> >
	  requires IndirectRelation<Pred, projected<I1,	Proj1>,	 projected<I2,
       (1) (ranges TS)
	  Proj2>>
	  auto mismatch(I1 first1, S1 last1, I2	first2,	S2 last2, Pred pred =
	  Pred{},
	  Proj1	proj1 =	Proj1{}, Proj2 proj2 = Proj2{})

	  -> ranges::tagged_pair<tag::in1(I1), tag::in2(I2)>;
	  template< InputRange R1, InputRange R2,

	  class	Proj1 =	ranges::identity, class	Proj2 =	ranges::identity,
	  class	Pred = ranges::equal_to<> >
	  requires IndirectRelation<Pred, projected<ranges::iterator_t<R1>,
	  Proj1>,
       (2) (ranges TS)
	  projected<ranges::iterator_t<R2>, Proj2>>
	  auto mismatch(R1&& r1, R2&& r2, Pred pred = Pred{},
	  Proj1	proj1 =	Proj1{}, Proj2 proj2 = Proj2{})
	  -> ranges::tagged_pair<tag::in1(ranges::safe_iterator_t<R1>),

	  tag::in2(ranges::safe_iterator_t<R2>)>;
	  template< InputIterator I1, Sentinel<I1> S1, class I2,

	  class	Pred = ranges::equal_to<>,
	  class	Proj1 =	ranges::identity, class	Proj2 =	ranges::identity >
	  requires InputIterator<std::decay_t<I2>> && !Range<I2> &&
	  IndirectRelation<Pred,	     projected<I1,	       Proj1>,
       (3) (ranges TS)
	  projected<std::decay_t<I2>,				       Proj2>>
       (deprecated)
	  auto mismatch(I1 first1, S1 last1, I2&& first2_, Pred	pred =
	  Pred{},
	  Proj1	proj1 =	Proj1{}, Proj2 proj2 = Proj2{})

	  -> ranges::tagged_pair<tag::in1(I1), tag::in2(std::decay_t<I2>)>;
	  template< InputRange R1, class I2, class Pred	= ranges::equal_to<>,

	  class	Proj1 =	ranges::identity, class	Proj2 =	ranges::identity>
	  requires InputIterator<std::decay_t<I2>> && !Range<I2> &&
	  IndirectRelation<Pred,   projected<ranges::iterator_t<R1>,   Proj1>,
       (ranges TS)
	  projected<std::decay_t<I2>,				       Proj2>>
       (4) (deprecated)
	  auto mismatch(R1&& r1, I2&& first2_, Pred pred = Pred{},
	  Proj1	proj1 =	Proj1{}, Proj2 proj2 = Proj2{})
	  -> ranges::tagged_pair<tag::in1(ranges::safe_iterator_t<Rng1>),

	  tag::in2(std::decay_t<I2>)>;

	  1)  Returns  the first mismatching pair of elements from two ranges:
       one defined by
	  [first1, last1) and another defined by [first2, last2).
	  2) Same as (1), but uses r1 as the first source range	and r2 as  the
       second source
	  range,  as  if using ranges::begin(r1) as first1, ranges::end(r1) as
       last1,
	  ranges::begin(r2) as first2, and ranges::end(r2) as last2.
	  3) Same as (1), but behaves as if first2 is std::decay_t<I2>	first2
       =
	  std::forward<I2>(first2_);  and  last2 is ranges::unreachable{}. The
       underlying
	  algorithm never increments first2 more than last1 - first1 times.
	  4) Same as (3), but uses r1 as the first source range, as  if	 using
       ranges::begin(r1)
	  as first1 and	ranges::end(r1)	as last1.

	  Elements  are	 compared  using pred to the projected elements	of the
       two ranges, as if
	  by  ranges::invoke(pred,  ranges::invoke(proj1,   *i),   ranges::in-
       voke(proj2, *j)).

	  Notwithstanding  the	declarations depicted above, the actual	number
       and order of
	  template parameters for algorithm declarations is unspecified. Thus,
       if explicit
	  template arguments are used when calling an algorithm,  the  program
       is probably
	  non-portable.

Parameters
	  first1, last1	- the first range of the elements
	  r1		- the first range of the elements
	  first2, last2	- the second range of the elements
	  r2		- the second range of the elements
	  first2_	- the beginning	of the second range of the elements
	  pred		- predicate to apply to	the projected elements
	  proj1		 -  projection	to  apply to the elements in the first
       range
	  proj2		- projection to	apply to the elements  in  the	second
       range

Return value
	  A  tagged_pair object	with iterators to the first two	non-equal ele-
       ments (the
	  iterator from	the first range	has the	tag in1	and the	iterator  from
       the second range
	  has the tag in2).

	  If  no  mismatches  are  found  when the comparison reaches last1 or
       last2, whichever
	  happens first, the pair holds	the end	iterator and the corresponding
       iterator	from
	  the other range.

Complexity
	  At most last1	- first1 applications of the predicate and  each  pro-
       jection.

Possible implementation
	  template<  InputIterator I1, Sentinel<I1> S1,	InputIterator I2, Sen-
       tinel<I2> S2,
		    class   Proj1   =	ranges::identity,   class   Proj2    =
       ranges::identity,
		    class Pred = ranges::equal_to<> >
	    requires   IndirectRelation<Pred,	projected<I1,	Proj1>,	  pro-
       jected<I2, Proj2>>
	  auto mismatch(I1 first1, S1 last1, I2	first2,	S2 last2, Pred pred  =
       Pred{},
			Proj1 proj1 = Proj1{}, Proj2 proj2 = Proj2{})
	    -> ranges::tagged_pair<tag::in1(I1), tag::in2(I2)>
	  {
	      while (first1 != last1 &&	first2 != last2	&&
		     ranges::invoke(pred, ranges::invoke(proj1,	*first1),
					  ranges::invoke(proj2,	*first2))) {
		  ++first1;
		  ++first2;
	      }
	      return {first1, first2};
	  }

Example
	   This	section	is incomplete
	   Reason: no example

See also
	  mismatch		   finds  the  first position where two	ranges
       differ
				  (function template)
	  equal			  determines if	two sets of elements  are  the
       same
				  (function template)
	  find			   finds the first element satisfying specific
       criteria
	  find_if		  (function template)
	  find_if_not
				  returns true if one range  is	 lexicographi-
       cally less than
	  lexicographical_compare another
				  (function template)
	  search		  searches for a range of elements
				  (function template)

http://cppreference.com		  2022.07.31	 std::experi...es::mismatch(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=std::experimental::ranges::mismatch&sektion=3&manpath=FreeBSD+Ports+15.0>

home | help