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>,
       (1) (ranges TS)
	  projected<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)>;
	  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>,
       (ranges TS)
					      projected<std::decay_t<I2>,
       (3) (deprecated)
	  Proj2>>
	  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>,
       (4) (ranges TS)
					      projected<std::decay_t<I2>,
       (deprecated)
	  Proj2>>
	  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::iden-
       tity,
		   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)

Category:
	    * Todo no example

http://cppreference.com		  2024.06.10	 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.1.quarterly>

home | help