home | help
std::experi...nd_first_of(3)   C++ Standard Libary  std::experi...nd_first_of(3)

NAME
     std::experimental::ranges::find_first_of	       -	 std::experimen-
     tal::ranges::find_first_of

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

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

			  Proj1 proj1 = Proj1{}, Proj2 proj2 = Proj2{} );
	template< InputRange R1, ForwardRange R2,

		  class Proj1 = ranges::identity, class Proj2 =
	ranges::identity,
		  IndirectRelation<projected<ranges::iterator_t<R1>, Proj1>,
				   projected<ranges::iterator_t<R2>, Proj2>> (2)
     (ranges TS)
	Pred = ranges::equal_to<> >
	ranges::safe_iterator_t<R1> find_first_of( R1&& r1, R2&& r2, Pred
	pred = Pred{},

						   Proj1 proj1 = Proj1{},
	Proj2 proj2 = Proj2{} );

	1) Searches the range [first1, last1) for any of  the  elements  in  the
     range
	[first2,  last2),  after  projecting the ranges with proj1 and proj2 re-
     spectively. The
	projected elements are compared using pred.
	2) Same as (1), but uses r1 as the first source range and r2 as the sec-
     ond 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.

Parameters
	first1, last1 - the range of elements to examine
	r1	      - the range of elements to examine
	first2, last2 - the range of elements to search for
	r2	      - the range of elements to search for
	pred	      - predicate to use to compare the projected elements with
	proj1	      - projection to apply to the elements in the first range
	proj2	      - projection to apply to the elements in the second range

Return value
	Iterator to the first element in the range [first1, last1) that is equal
     to an
	element from the range [first2, last2) after projection. If no such ele-
     ment is
	found, an iterator comparing equal to last1 is returned.

Complexity
	At most (S * N) applications of the predicate and each projection, where
     S =
	distance(last2 - first2) and N = last1 - first1.

Possible implementation
	template<InputIterator	I1,  Sentinel<I1>  S1,	ForwardIterator I2, Sen-
     tinel<I2> S2,
		 class Proj1 = ranges::identity, class Proj2 = ranges::identity,
		 IndirectRelation<projected<I1, Proj1>,
				  projected<I2,       Proj2>>	    Pred       =
     ranges::equal_to<>>
	I1  find_first_of(I1  first1, S1 last1, I2 first2, S2 last2, Pred pred =
     Pred{},
			 Proj1 proj1 = Proj1{}, Proj2 proj2 = Proj2{})
	{
	    for (; first1 != last1; ++first1)
		for (ForwardIt it = first2; it != last2; ++it)
		    if (ranges::invoke(pred, ranges::invoke(proj1, *first1),
					     ranges::invoke(proj2, *it)))
			return first1;
	    return first1;
	}

Example
	 This section is incomplete
	 Reason: no example

See also
	find_first_of searches for any one of a set of elements
		      (function template)
	find	      finds the first element satisfying specific criteria
	find_if       (function template)
	find_if_not

Category:
	  * Todo no example

http://cppreference.com 	   2024.06.10	    std::experi...nd_first_of(3)

home | help