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

FreeBSD Manual Pages

  
 
  

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

NAME
       std::is_heap - std::is_heap

Synopsis
	  Defined in header <algorithm>
	  template<   class  RandomIt  >				(since
       C++11)
	  bool is_heap(	RandomIt  first,  RandomIt  last  );		(until
       C++20)
	  template< class RandomIt >
	  constexpr  bool  is_heap(  RandomIt  first,  RandomIt		(since
       C++20)
	  last );
	  template< class ExecutionPolicy, class RandomIt
	  >							 (2)	(since
       C++17)
	  bool is_heap(	ExecutionPolicy&& policy, RandomIt
	  first, RandomIt last );
	  template<    class	RandomIt,    class    Compare	>	   (1)
       (since C++11)
	  bool	   is_heap(	 RandomIt      first,	   RandomIt	 last,
       (until C++20)
	  Compare comp );
	  template< class RandomIt, class Compare >
	  constexpr   bool   is_heap(	RandomIt   first,   RandomIt	   (3)
       (since C++20)
	  last,	Compare	comp );
	  template< class ExecutionPolicy, class RandomIt,
	  class	  Compare    >						   (4)
       (since C++17)
	  bool is_heap(	ExecutionPolicy&& policy, RandomIt
	  first, RandomIt last,	Compare	comp );

	  Checks whether the elements in range [first, last) are a max heap.

	  1) Elements are compared using operator<.
	  3)  Elements are compared using the given binary comparison function
       comp.
	  2,4) Same as (1,3), but executed according to	 policy.  These	 over-
       loads do	not
	  participate in overload resolution unless
	  std::is_execution_policy_v<std::decay_t<ExecutionPolicy>>
	  (until C++20)
	  std::is_execution_policy_v<std::remove_cvref_t<ExecutionPolicy>>
	  (since C++20)	is true.

Parameters
	  first, last -	 the range of elements to examine
	  policy      -	 the execution policy to use. See execution policy for
       details.
			 comparison  function object (i.e. an object that sat-
       isfies the
			 requirements of Compare) which	returns	 true  if  the
       first argument
			 is less than the second.

			 The  signature	 of  the comparison function should be
       equivalent to the
			 following:

			 bool cmp(const	Type1 &a, const	Type2 &b);
	  comp	      -
			 While the signature does not need to  have  const  &,
       the function must
			 not  modify the objects passed	to it and must be able
       to accept all
			 values	of type	(possibly const) Type1 and  Type2  re-
       gardless	of value
			 category (thus, Type1 & is not	allowed
			 ,  nor	is Type1 unless	for Type1 a move is equivalent
       to a copy
			 (since	C++11)).
			 The types Type1 and Type2 must	be such	that an	object
       of type
			 RandomIt can be dereferenced and then implicitly con-
       verted to both of
			 them.

Type requirements
	  -
	  RandomIt must	meet the requirements of LegacyRandomAccessIterator.

Return value
	  true if the range is max heap, false otherwise.

Complexity
	  Linear in the	distance between first and last.

Exceptions
	  The overloads	with a template	parameter named	ExecutionPolicy	report
       errors as
	  follows:

	    * If execution of a	function invoked  as  part  of	the  algorithm
       throws an exception
	      and ExecutionPolicy is one of the	standard policies, std::termi-
       nate is called.
	      For  any	other ExecutionPolicy, the behavior is implementation-
       defined.
	    * If the algorithm fails to	 allocate  memory,  std::bad_alloc  is
       thrown.

Notes
	  A max	heap is	a range	of elements [f,l) that has the following prop-
       erties:

		     *	With  N	 = l-f,	for all	0 < i <	N, f[(i-1)/2] does not
       compare less than
		       f[i].
		     * A new element can be  added  using  std::push_heap,  in
       \(\scriptsize
		       \mathcal{O}(\log	N)\)(log N) time.
		     *	The  first element can be removed using	std::pop_heap,
       in \(\scriptsize
		       \mathcal{O}(\log	N)\)(log N) time.

Example
       // Run this code

	#include <algorithm>
	#include <bit>
	#include <iostream>
	#include <vector>

	int main()
	{
	    std::vector<int> v { 3, 1, 4, 1, 5,	9, 2, 6, 5, 3, 5, 8, 9,	 7,  9
       };

	    std::cout << "initially, v:\n";
	    for	(auto i	: v) std::cout << i << ' ';
	    std::cout << '\n';

	    if (!std::is_heap(v.begin(), v.end())) {
		std::cout << "making heap...\n";
		std::make_heap(v.begin(), v.end());
	    }

	    std::cout << "after	make_heap, v:\n";
	    for	(auto t{1U}; auto i : v)
		std::cout << i << (std::has_single_bit(++t) ? "	 " : " ");
	    std::cout << '\n';
	}

Output:
	initially, v:
	3 1 4 1	5 9 2 6	5 3 5 8	9 7 9
	making heap...
	after make_heap, v:
	9  6 9	5 5 9 7	 1 1 3 5 8 3 4 2

See also
	  is_heap_until	  finds	the largest subrange that is a max heap
	  (C++11)	  (function template)
	  make_heap	  creates a max	heap out of a range of elements
			  (function template)
	  push_heap	  adds an element to a max heap
			  (function template)
	  pop_heap	  removes the largest element from a max heap
			  (function template)
	  sort_heap	   turns a max heap into a range of elements sorted in
       ascending order
			  (function template)
	  ranges::is_heap checks if the	given range is a max heap
	  (C++20)	  (niebloid)

http://cppreference.com		  2022.07.31		       std::is_heap(3)

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

home | help