|
Aleph-w 3.0
A C++ Library for Data Structures and Algorithms
|
Dynamic heap (priority queue) backed by DynArray.
More...
#include <tpl_dynArrayHeap.H>
Classes | |
| struct | Iterator |
Public Types | |
| using | Item_Type = T |
Public Types inherited from StlAlephIterator< SetName > | |
| using | iterator = StlIterator< SetName > |
| using | const_iterator = StlConstIterator< SetName > |
Public Member Functions | |
| DynArrayHeap (Compare cmp_fct=Compare()) | |
| Default constructor. | |
| template<template< typename > class List> | |
| DynArrayHeap (const List< T > &l) | |
| template<class It > | |
| DynArrayHeap (It b, It e) | |
| DynArrayHeap (std::initializer_list< T > l) | |
| template<typename ... Args> | |
| DynArrayHeap (const T &item, Args &... args) | |
| template<typename ... Args> | |
| DynArrayHeap (T &&item, Args &... args) | |
| T & | top () |
| Return the element with highest priority (the heap top). | |
| const T & | top () const |
| Const overload of top(). | |
| T & | insert (const T &key) |
Insert a copy of key into the heap. | |
| T & | insert (T &&key) |
| Insert a key by moving it into the heap. | |
| void | reserve (size_t n) |
Ensure the underlying array has capacity for at least n elements. | |
| T & | insert_direct (const T &key) |
| Insert by directly indexing into the backing array. | |
| T & | insert_direct (T &&key) |
| Move overload of insert_direct(). | |
| T & | put (const T &key) |
| Alias for insert(). | |
| T & | put (T &&key) |
| Alias for insert() (move overload). | |
| T & | append (const T &key) |
| Alias for insert(). | |
| T & | append (T &&key) |
| Alias for insert() (move overload). | |
| T | getMin () |
| Remove and return the top element. | |
| T | get () |
| T | getMax () |
| constexpr size_t | size () const noexcept |
| Return the number of elements. | |
| constexpr bool | is_empty () const noexcept |
| Return true if the heap is empty. | |
| template<class Operation > | |
| bool | traverse (Operation &operation) |
| Traverse all elements in the heap. | |
| template<class Operation > | |
| bool | traverse (Operation &operation) const |
| template<class Operation > | |
| bool | traverse (Operation &&operation=Operation()) const |
| template<class Operation > | |
| bool | traverse (Operation &&operation=Operation()) |
Public Member Functions inherited from LocateFunctions< Container, Type > | |
| auto | get_it () const |
| Return a properly initialized iterator positioned at the first item on the container. | |
| auto | get_it (const size_t pos) const |
Return a properly initialized iterator positioned at the pos item on the container. | |
| auto | get_itor () const |
Alias of get_it(). | |
| Type & | nth_ne (const size_t n) noexcept |
| Return the n‑th element without bounds checking. | |
| const Type & | nth_ne (const size_t n) const noexcept |
Const overload of nth_ne(size_t). | |
| Type & | nth (const size_t n) |
| Return the n-th item of container. | |
| const Type & | nth (const size_t n) const |
Const overload of nth(size_t). | |
| template<class Operation > | |
| Type * | find_ptr (Operation &operation) noexcept(operation_is_noexcept< Operation >()) |
| Find a pointer to an item in the container according to a searching criteria. | |
| template<class Operation > | |
| const Type * | find_ptr (Operation &operation) const noexcept(operation_is_noexcept< Operation >()) |
Const overload of find_ptr(Operation&). | |
| template<class Operation > | |
| const Type * | find_ptr (Operation &&operation) const noexcept(operation_is_noexcept< Operation >()) |
Overload of find_ptr(Operation&) const that accepts rvalues. | |
| template<class Operation > | |
| Type * | find_ptr (Operation &&operation) noexcept(operation_is_noexcept< Operation >()) |
Overload of find_ptr(Operation&) that accepts rvalues. | |
| template<class Operation > | |
| size_t | find_index (Operation &operation) const noexcept(operation_is_noexcept< Operation >()) |
| Find the position of an item in the container according to a searching criteria. | |
| template<class Operation > | |
| size_t | find_index (Operation &&operation) const noexcept(operation_is_noexcept< Operation >()) |
Overload of find_index(Operation&) that accepts rvalues. | |
| template<class Operation > | |
| std::tuple< bool, Type > | find_item (Operation &operation) noexcept(operation_is_noexcept< Operation >()) |
| Safe sequential searching of an item matching a criteria. | |
| template<class Operation > | |
| std::tuple< bool, Type > | find_item (Operation &operation) const noexcept(operation_is_noexcept< Operation >()) |
| template<class Operation > | |
| std::tuple< bool, Type > | find_item (Operation &&operation) noexcept(operation_is_noexcept< Operation >()) |
| template<class Operation > | |
| std::tuple< bool, Type > | find_item (Operation &&operation) const noexcept(operation_is_noexcept< Operation >()) |
Public Member Functions inherited from FunctionalMethods< Container, T > | |
| template<typename ... Args> | |
| void | emplace (Args &&... args) |
| Appends a new element into the container by constructing it in-place with the given args. | |
| template<typename ... Args> | |
| void | emplace_end (Args &&... args) |
| template<typename ... Args> | |
| void | emplace_ins (Args &&... args) |
| Insert a new element into the container by constructing it in-place with the given args. | |
| template<typename ... Args> | |
| size_t | ninsert (Args ... args) |
| Insert n variadic items. | |
| template<typename ... Args> | |
| size_t | nappend (Args ... args) |
| Append n variadic items. | |
| template<class Operation > | |
| void | for_each (Operation &operation) |
| Traverse all the container and performs an operation on each element. | |
| template<class Operation > | |
| void | for_each (Operation &operation) const |
Const overload of for_each(Operation&). | |
| template<class Operation > | |
| void | for_each (Operation &&operation) const |
Overload of for_each(Operation&) const that accepts rvalues. | |
| template<class Operation > | |
| void | for_each (Operation &&operation) |
Overload of for_each(Operation&) that accepts rvalues. | |
| template<class Operation > | |
| void | each (Operation &operation) |
Alias of for_each(Operation&). | |
| template<class Operation > | |
| void | each (Operation &operation) const |
Const alias of for_each(Operation&). | |
| template<class Operation > | |
| void | each (Operation &&operation) const |
Const alias of for_each(Operation&) that accepts rvalues. | |
| template<class Operation > | |
| void | each (Operation &&operation) |
Alias of for_each(Operation&) that accepts rvalues. | |
| template<class Operation > | |
| void | each (size_t pos, const size_t slice, Operation &operation) const |
Traverse the container starting at pos taking one item every slice, performing a mutable operation on each visited element. | |
| template<class Operation > | |
| void | each (const size_t pos, const size_t slice, Operation &&operation) const |
| template<class Operation > | |
| void | mutable_for_each (Operation &operation) |
| template<class Operation > | |
| void | mutable_for_each (Operation &&operation) |
| template<class Operation > | |
| bool | all (Operation &operation) const |
| Check if all the elements of container satisfy a condition. | |
| template<class Operation > | |
| bool | all (Operation &&operation) const |
Overload of all(Operation&) that accepts rvalues. | |
| template<class Operation > | |
| bool | exists (Operation &op) const |
| Test for existence in the container of an element satisfying a criteria. | |
| template<class Operation > | |
| bool | exists (Operation &&op) const |
Overload of exists(Operation&) that accepts rvalues. | |
| template<typename __T = T, class Operation = Aleph::Dft_Map_Op<T, __T>> | |
| Aleph::DynList< __T > | maps (Operation &op) const |
| Map the elements of the container. | |
| template<typename __T = T, class Operation = Aleph::Dft_Map_Op<__T, __T>> | |
| Aleph::DynList< __T > | maps (Operation &&op) const |
Overload of maps(Operation&) that accepts rvalues. | |
| template<typename __T = T, class Prop , class Operation > | |
| Aleph::DynList< __T > | maps_if (Prop prop, Operation &op) const |
| Conditional mapping of the elements of the container. | |
| template<typename __T = T, class Prop , class Operation > | |
| Aleph::DynList< __T > | maps_if (Prop prop, Operation &&op) const |
Overload of maps_if(Prop, Operation&) that accepts rvalues. | |
| Aleph::DynList< T > | to_dynlist () const |
| Convert container to DynList. | |
| std::vector< T > | to_vector () const |
| Convert container to std::vector. | |
| template<typename __T = T, class Op = Aleph::Dft_Fold_Op<__T, T>> | |
| __T | foldl (const __T &init, Op &op) const |
| Fold the elements of the container to a specific result. | |
| template<typename __T = T, class Op = Aleph::Dft_Fold_Op<__T, T>> | |
| __T | foldl (const __T &init, Op &&op=Op()) const |
Overload of foldl(const __T&, Op&) that accepts rvalues. | |
| template<typename __T = T, class Op = Aleph::Dft_Fold_Op<__T, T>> | |
| __T | fold_left (const __T &init, Op &op) const |
| Alias for foldl with the same accumulator type. | |
| template<typename __T = T, class Op = Aleph::Dft_Fold_Op<__T, T>> | |
| __T | fold_left (const __T &init, Op &&op=Op()) const |
Overload of fold_left(const __T&, Op&) that accepts rvalues. | |
| template<class Operation > | |
| T | fold (const T &init, Operation &operation) const |
| Simplified version of foldl() where the folded type is the same type of elements stored in the container. | |
| template<class Operation > | |
| T | fold (const T &init, Operation &&operation) const |
Overload of fold(const T&, Operation&) that accepts rvalues. | |
| template<class Operation > | |
| Aleph::DynList< T > | filter (Operation &operation) const |
| Filter the elements of a container according to a matching criteria. | |
| template<class Operation > | |
| Aleph::DynList< T > | filter (Operation &&operation) const |
Overload of filter(Operation&) that accepts rvalues. | |
| template<class Operation > | |
| Aleph::DynList< const T * > | ptr_filter (Operation &operation) const |
| Filter the elements of a container according to a matching criteria and return a pointer to the matched items in the container. | |
| template<class Operation > | |
| Aleph::DynList< const T * > | ptr_filter (Operation &&operation) const |
Overload of ptr_filter(Operation&) that accepts rvalues. | |
| template<class Operation > | |
| Aleph::DynList< std::tuple< T, size_t > > | pfilter (Operation &operation) const |
| Filter the elements of a container according to a matching criteria and determine its positions respect to the traversal of container. | |
| template<class Operation > | |
| Aleph::DynList< std::tuple< T, size_t > > | pfilter (Operation &&operation) const |
Overload of pfilter(Operation&) that accepts rvalues. | |
| template<class Operation > | |
| std::pair< Aleph::DynList< T >, Aleph::DynList< T > > | partition (Operation &op) const |
| Exclusive partition of container according to a filter criteria. | |
| template<class Operation > | |
| std::pair< Aleph::DynList< T >, Aleph::DynList< T > > | partition (Operation &&op) const |
Overload of partition(Operation&) that accepts rvalues. | |
| template<class Operation > | |
| std::pair< Aleph::DynList< T >, Aleph::DynList< T > > | partition (size_t n) const |
| Exclusive partition of container in the nth item. | |
| std::pair< Aleph::DynList< T >, Aleph::DynList< T > > | split_half () const |
| Split the container into two halves by alternating elements. | |
| template<class Operation > | |
| std::tuple< Aleph::DynList< T >, Aleph::DynList< T > > | tpartition (Operation &op) const |
| Exclusive partition of container according to a filter criteria. | |
| template<class Operation > | |
| std::tuple< Aleph::DynList< T >, Aleph::DynList< T > > | tpartition (Operation &&op) const |
Overload of tpartition(Operation&) that accepts rvalues. | |
| size_t | length () const noexcept |
| Count the number of elements of a container. | |
| Aleph::DynList< T > | rev () const |
| Return a list with the elements of container in reverse order respect to its traversal order. | |
| Aleph::DynList< T > | take (const size_t n) const |
| Return a list with the first n elements seen in the container during its traversal. | |
| Aleph::DynList< T > | take (size_t i, const size_t j, const size_t step=1) const |
| Return a list with elements seen in the container between i and j position respect to its traversal. | |
| Aleph::DynList< T > | drop (const size_t n) const |
| Drop the first n elements seen in the container during its traversal. | |
| void | mutable_drop (const size_t n) |
| Drop the first n elements seen from container. | |
Public Member Functions inherited from GenericItems< Container, T > | |
| Aleph::DynList< T > | items () const |
| Return a list of all the elements of a container sorted by traversal order. | |
| Aleph::DynList< T > | keys () const |
Public Member Functions inherited from EqualToMethod< Container > | |
| bool | equal_to (const Container &r) const noexcept |
Test if elements of this are exactly contained in another container. | |
| bool | operator== (const Container &r) const noexcept |
| bool | operator!= (const Container &r) const noexcept |
| Negation of equal_to() | |
Public Member Functions inherited from StlAlephIterator< SetName > | |
| iterator | begin () noexcept |
| Return an STL-compatible iterator to the first element. | |
| iterator | end () noexcept |
| Return an STL-compatible end iterator. | |
| const_iterator | begin () const noexcept |
| Return a const iterator to the first element. | |
| const_iterator | end () const noexcept |
| Return a const end iterator. | |
| const_iterator | cbegin () const noexcept |
| Return a const iterator to the first element. | |
| const_iterator | cend () const noexcept |
| Return a const end iterator. | |
Static Private Member Functions | |
| static size_t | r_index (const size_t &i) noexcept |
Private Attributes | |
| DynArray< T > | array |
| size_t | num_items = 0 |
| Compare | cmp |
Additional Inherited Members | |
Related Symbols inherited from FunctionalMethods< Container, T > | |
| each | |
| each | |
| each | |
Dynamic heap (priority queue) backed by DynArray.
| T | element type stored in the heap |
| Compare | comparator defining the priority order |
Definition at line 142 of file tpl_dynArrayHeap.H.
| using Aleph::DynArrayHeap< T, Compare >::Item_Type = T |
Definition at line 159 of file tpl_dynArrayHeap.H.
|
inline |
Default constructor.
Definition at line 162 of file tpl_dynArrayHeap.H.
|
inline |
Definition at line 167 of file tpl_dynArrayHeap.H.
|
inline |
Definition at line 167 of file tpl_dynArrayHeap.H.
|
inline |
Definition at line 167 of file tpl_dynArrayHeap.H.
|
inline |
Definition at line 169 of file tpl_dynArrayHeap.H.
|
inline |
Definition at line 169 of file tpl_dynArrayHeap.H.
|
inline |
Alias for insert().
Definition at line 256 of file tpl_dynArrayHeap.H.
References Aleph::DynArrayHeap< T, Compare >::insert().
Referenced by TEST().
|
inline |
Alias for insert() (move overload).
Definition at line 259 of file tpl_dynArrayHeap.H.
References Aleph::DynArrayHeap< T, Compare >::insert().
|
inline |
Definition at line 289 of file tpl_dynArrayHeap.H.
References Aleph::DynArrayHeap< T, Compare >::getMin().
Referenced by TEST().
|
inline |
Definition at line 295 of file tpl_dynArrayHeap.H.
References Aleph::DynArrayHeap< T, Compare >::getMin().
Referenced by TEST().
|
inline |
Remove and return the top element.
With the default comparator (Aleph::less<T>), this removes and returns the smallest element.
| underflow_error | if the heap is empty. |
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
Definition at line 268 of file tpl_dynArrayHeap.H.
References ah_underflow_error_if, Aleph::DynArrayHeap< T, Compare >::array, Aleph::DynArrayHeap< T, Compare >::cmp, FunctionalMethods< Container, T >::maps(), Aleph::DynArrayHeap< T, Compare >::num_items, and Aleph::sift_down().
Referenced by Aleph::DynArrayHeap< T, Compare >::get(), Aleph::DynArrayHeap< T, Compare >::getMax(), TEST(), TEST(), TEST(), and TEST().
|
inline |
Insert a copy of key into the heap.
| [in] | key | Key to insert. |
Definition at line 201 of file tpl_dynArrayHeap.H.
References Aleph::DynArrayHeap< T, Compare >::array, Aleph::DynArrayHeap< T, Compare >::cmp, Aleph::DynArrayHeap< T, Compare >::num_items, and Aleph::sift_up().
Referenced by Aleph::DynArrayHeap< T, Compare >::append(), Aleph::DynArrayHeap< T, Compare >::append(), Aleph::DynArrayHeap< T, Compare >::put(), Aleph::DynArrayHeap< T, Compare >::put(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), and TEST().
|
inline |
Insert a key by moving it into the heap.
| [in] | key | Key to move. |
Definition at line 213 of file tpl_dynArrayHeap.H.
References Aleph::DynArrayHeap< T, Compare >::array, Aleph::DynArrayHeap< T, Compare >::cmp, Aleph::DynArrayHeap< T, Compare >::num_items, and Aleph::sift_up().
|
inline |
Insert by directly indexing into the backing array.
This variant uses operator() instead of touch().
Definition at line 234 of file tpl_dynArrayHeap.H.
References Aleph::DynArrayHeap< T, Compare >::array, Aleph::DynArrayHeap< T, Compare >::cmp, Aleph::DynArrayHeap< T, Compare >::num_items, and Aleph::sift_up().
Referenced by TEST().
|
inline |
Move overload of insert_direct().
Definition at line 242 of file tpl_dynArrayHeap.H.
References Aleph::DynArrayHeap< T, Compare >::array, Aleph::DynArrayHeap< T, Compare >::cmp, Aleph::DynArrayHeap< T, Compare >::num_items, and Aleph::sift_up().
|
inlineconstexprnoexcept |
Return true if the heap is empty.
Definition at line 304 of file tpl_dynArrayHeap.H.
References Aleph::DynArrayHeap< T, Compare >::num_items.
|
inline |
Alias for insert().
Definition at line 250 of file tpl_dynArrayHeap.H.
References Aleph::DynArrayHeap< T, Compare >::insert().
Referenced by TEST().
|
inline |
Alias for insert() (move overload).
Definition at line 253 of file tpl_dynArrayHeap.H.
References Aleph::DynArrayHeap< T, Compare >::insert().
|
inlinestaticprivatenoexcept |
Definition at line 153 of file tpl_dynArrayHeap.H.
|
inline |
Ensure the underlying array has capacity for at least n elements.
| out_of_range_error | if n is smaller than the current size. |
Definition at line 224 of file tpl_dynArrayHeap.H.
References ah_out_of_range_error_if, Aleph::DynArrayHeap< T, Compare >::array, and Aleph::DynArrayHeap< T, Compare >::num_items.
|
inlineconstexprnoexcept |
Return the number of elements.
Definition at line 301 of file tpl_dynArrayHeap.H.
References Aleph::DynArrayHeap< T, Compare >::num_items.
|
inline |
Return the element with highest priority (the heap top).
With the default comparator (Aleph::less<T>), this is the smallest element.
| underflow_error | if the heap is empty. |
Definition at line 178 of file tpl_dynArrayHeap.H.
References ah_underflow_error_if, Aleph::DynArrayHeap< T, Compare >::array, and Aleph::DynArrayHeap< T, Compare >::num_items.
Referenced by TEST(), TEST(), TEST(), TEST(), TEST(), and TEST().
|
inline |
Const overload of top().
Definition at line 186 of file tpl_dynArrayHeap.H.
References ah_underflow_error_if, Aleph::DynArrayHeap< T, Compare >::array, and Aleph::DynArrayHeap< T, Compare >::num_items.
|
inline |
Definition at line 354 of file tpl_dynArrayHeap.H.
References FunctionalMethods< Container, T >::maps().
|
inline |
Definition at line 348 of file tpl_dynArrayHeap.H.
References FunctionalMethods< Container, T >::maps().
|
inline |
Traverse all elements in the heap.
Iteration order is the internal heap array order (not sorted).
The traversal stops early if the operation returns false.
Definition at line 333 of file tpl_dynArrayHeap.H.
References Aleph::DynArrayHeap< T, Compare >::Iterator::has_curr(), and FunctionalMethods< Container, T >::maps().
Referenced by TEST(), TEST(), and Aleph::DynArrayHeap< T, Compare >::traverse().
|
inline |
Definition at line 342 of file tpl_dynArrayHeap.H.
References FunctionalMethods< Container, T >::maps(), and Aleph::DynArrayHeap< T, Compare >::traverse().
|
private |
Definition at line 148 of file tpl_dynArrayHeap.H.
Referenced by Aleph::DynArrayHeap< T, Compare >::getMin(), Aleph::DynArrayHeap< T, Compare >::insert(), Aleph::DynArrayHeap< T, Compare >::insert(), Aleph::DynArrayHeap< T, Compare >::insert_direct(), Aleph::DynArrayHeap< T, Compare >::insert_direct(), Aleph::DynArrayHeap< T, Compare >::reserve(), Aleph::DynArrayHeap< T, Compare >::top(), and Aleph::DynArrayHeap< T, Compare >::top().
|
private |
Definition at line 151 of file tpl_dynArrayHeap.H.
Referenced by Aleph::DynArrayHeap< T, Compare >::getMin(), Aleph::DynArrayHeap< T, Compare >::insert(), Aleph::DynArrayHeap< T, Compare >::insert(), Aleph::DynArrayHeap< T, Compare >::insert_direct(), and Aleph::DynArrayHeap< T, Compare >::insert_direct().
|
private |
Definition at line 149 of file tpl_dynArrayHeap.H.
Referenced by Aleph::DynArrayHeap< T, Compare >::getMin(), Aleph::DynArrayHeap< T, Compare >::insert(), Aleph::DynArrayHeap< T, Compare >::insert(), Aleph::DynArrayHeap< T, Compare >::insert_direct(), Aleph::DynArrayHeap< T, Compare >::insert_direct(), Aleph::DynArrayHeap< T, Compare >::is_empty(), Aleph::DynArrayHeap< T, Compare >::reserve(), Aleph::DynArrayHeap< T, Compare >::size(), Aleph::DynArrayHeap< T, Compare >::top(), and Aleph::DynArrayHeap< T, Compare >::top().