home | help
std::flat_set::equal_range(3)  C++ Standard Libary std::flat_set::equal_range(3)

NAME
     std::flat_set::equal_range - std::flat_set::equal_range

Synopsis
	std::pair<iterator,  iterator>	equal_range( const Key& key );	     (1)
     (since C++23)
	std::pair<const_iterator, const_iterator> equal_range( const  Key&   (2)
     (since C++23)
	key ) const;
	template<  class  K >						     (3)
     (since C++23)
	std::pair<iterator, iterator> equal_range( const K& x );
	template< class K >
	std::pair<const_iterator, const_iterator> equal_range( const K&  x   (4)
     (since C++23)
	) const;

	Returns  a  range containing all elements with the given key in the con-
     tainer. The
	range is defined by two iterators, one pointing  to  the  first  element
     that is not
	less  than  key  and  another pointing to the first element greater than
     key.
	Alternatively, the first iterator may be  obtained  with  lower_bound(),
     and the second
	with upper_bound().

	1,2) Compares the keys to key.
	3,4)  Compares	the  keys  to the value x. This overload participates in
     overload
	resolution only if the qualified-id Compare::is_transparent is valid and
     denotes a
	type. It allows calling this function without constructing  an	instance
     of Key.

Parameters
	key - key value to compare the elements to
	x   - alternative value that can be compared to Key

Return value
	std::pair  containing a pair of iterators defining the wanted range: the
     first
	pointing to the first element that is not less than key and  the  second
     pointing to
	the first element greater than key.

	If there are no elements not less than key, past-the-end (see end()) it-
     erator is
	returned  as  the  first  element.  Similarly  if  there are no elements
     greater than key,
	past-the-end iterator is returned as the second element.

Complexity
	Logarithmic in the size of the container.

Example
     // Run this code

      #include <iostream>
      #include <flat_set>

      template<typename I>
      void print_equal_range(I first, I lb, I ub, I last)
      {
	  for (I i{first}; i != lb; ++i)
	      std::cout << *i << ' ';
	  std::cout << "[ ";

	  for (I i{lb}; i != ub; ++i)
	      std::cout << *i << ' ';
	  std::cout << ") ";

	  for (I i{ub}; i != last; ++i)
	      std::cout << *i << ' ';
	  std::cout << '\n';
      }

      int main()
      {
	  std::flat_set<int> c{4, 3, 2, 1, 3, 3};
	  std::cout << "c = ";
	  print_equal_range(begin(c), begin(c), end(c), end(c));
	  for (int key{}; key != 6; ++key)
	  {
	      std::cout << "key = " << key << "; equal range = ";
	      const auto [lb, ub] = c.equal_range(key);
	      print_equal_range(begin(c), lb, ub, end(c));
	  }
      }

Output:
      c = [ 1 2 3 4 )
      key = 0; equal range = [ ) 1 2 3 4
      key = 1; equal range = [ 1 ) 2 3 4
      key = 2; equal range = 1 [ 2 ) 3 4
      key = 3; equal range = 1 2 [ 3 ) 4
      key = 4; equal range = 1 2 3 [ 4 )
      key = 5; equal range = 1 2 3 4 [ )

See also
	find	    finds element with specific key
		    (public member function)
	contains    checks if the container contains element with specific key
		    (public member function)
	count	    returns the number of elements matching specific key
		    (public member function)
	upper_bound returns an iterator to the first element  greater  than  the
     given key
		    (public member function)
	lower_bound  returns  an iterator to the first element not less than the
     given key
		    (public member function)
	equal_range returns range of elements matching a specific key
		    (function template)

http://cppreference.com 	   2024.06.10	   std::flat_set::equal_range(3)

home | help