Maintains a sequence of (key,info) pairs sorted by key. More...
#include <ogdf/basic/SortedSequence.h>
Classes | |
struct | Element |
Internal structure to hold the items and internal forward/backward pointers of the skiplist. More... | |
Public Types | |
using | const_iterator = SortedSequenceConstIterator< KEY, INFO, CMP > |
The const-iterator type for sorted sequences (bidirectional iterator). | |
using | const_reverse_iterator = SortedSequenceConstReverseIterator< KEY, INFO, CMP > |
The const reverse iterator type for sorted sequences (bidirectional iterator). | |
using | iterator = SortedSequenceIterator< KEY, INFO, CMP > |
The iterator type for sorted sequences (bidirectional iterator). | |
using | reverse_iterator = SortedSequenceReverseIterator< KEY, INFO, CMP > |
The reverse iterator type for sorted sequences (bidirectional iterator). | |
Public Member Functions | |
SortedSequence (const CMP &comparer=CMP()) | |
Constructs an initially empty sorted sequence. | |
SortedSequence (const SortedSequence< KEY, INFO, CMP > &S) | |
Copy constructor. | |
SortedSequence (SortedSequence< KEY, INFO, CMP > &&S) | |
Copy constructor (move semantics). | |
SortedSequence (std::initializer_list< std::pair< KEY, INFO > > initList) | |
Constructs a sorted sequence containing the elements in initList . | |
~SortedSequence () | |
Destructor. | |
General information and standard iterators | |
These methods provide basic information like the number of elements in the list, as well as iterators to the begin and end of the sequence allowing forward and backward iteration over the sequence. | |
int | size () const |
Returns the current size of the sequence, i.e., the number of stored elements. | |
bool | empty () const |
Returns true if the sequence is empty, false otherwise. | |
iterator | begin () |
Returns an iterator pointing to the first element. | |
const_iterator | begin () const |
Returns a const-iterator pointing to the first element. | |
const_iterator | cbegin () const |
Returns a const-iterator pointing to the first element. | |
iterator | end () |
Returns an iterator pointing to one past the last element. | |
const_iterator | end () const |
Returns a const-iterator pointing to one past the last element. | |
const_iterator | cend () const |
Returns a const-iterator pointing to one past the last element. | |
reverse_iterator | rbegin () |
Returns a reverse iterator pointing to the last element. | |
const_reverse_iterator | rbegin () const |
Returns a const reverse iterator pointing to the last element. | |
const_reverse_iterator | crbegin () const |
Returns a const reverse iterator pointing to the last element. | |
reverse_iterator | rend () |
Returns a reverse iterator pointing to one before the first element. | |
const_reverse_iterator | rend () const |
Returns a const reverse iterator pointing to one before the first element. | |
const_reverse_iterator | crend () const |
Returns a const reverse iterator pointing to one before the first element. | |
Lookup operations | |
These methods can be used to find elements by key. They return iterators pointing to the respective element in the sequence. | |
iterator | lookup (const KEY &key) |
Returns an iterator to the element with key key , or a null iterator if no such element exists. | |
const_iterator | lookup (const KEY &key) const |
Returns a const-iterator to the element with key key , or a null iterator if no such element exists. | |
iterator | locate (const KEY &key) |
Returns an iterator to the element < k1, i1 > such that k1 is minimal with k1 ≥ key , or a null iterator if no such element exists. | |
const_iterator | locate (const KEY &key) const |
Returns a const-iterator to the element < k1, i1 > such that k1 is minimal with k1 ≥ key , or a null iterator if no such element exists. | |
iterator | minItem () |
Returns an iterator to the element with minimal key if the sequence is not empty, an invalid iterator otherwise. | |
const_iterator | minItem () const |
Returns a const-iterator to the element with minimal key if the sequence is not empty, an invalid const-iterator otherwise. | |
reverse_iterator | maxItem () |
Returns a reverse iterator to the element with maximal key if the sequence is not empty, an invalid reverse iterator otherwise. | |
const_reverse_iterator | maxItem () const |
Returns a const reverse iterator to the element with maximal key if the sequence is not empty, an invalid const reverse iterator otherwise. | |
Insertion and deletion | |
These method provide basic modification methods, like inserting new elements or removing elements from the sequence. | |
iterator | insert (const KEY &key, const INFO &info) |
Updates information for key if contained in sequence, or adds a new element <key , info> . | |
void | del (const KEY &key) |
Removes the element with key key (if such an element exists). | |
void | delItem (iterator it) |
Removes the element to which it points from the sequence. | |
void | clear () |
Removes all elements from the sorted sequence. | |
Operators | |
The following operators are overloeded for sorted sequences. | |
SortedSequence< KEY, INFO, CMP > & | operator= (const SortedSequence< KEY, INFO, CMP > &S) |
Assignment operator. | |
SortedSequence< KEY, INFO, CMP > & | operator= (SortedSequence< KEY, INFO, CMP > &&S) |
Assignment operator (move semantics). | |
bool | operator== (const SortedSequence< KEY, INFO, CMP > &S) |
Returns true if the keys stored in this sequence equal the keys in S , false otherwise. | |
bool | operator!= (const SortedSequence< KEY, INFO, CMP > &S) |
Returns false if the keys stored in this sequence equal the keys in S , true otherwise. | |
Special modification methods | |
These methods must be handled with care; they are only useful in very specific scenarios. First read their documentation carefully! | |
iterator | insertAfter (iterator it, const KEY &key, const INFO &info) |
Adds a new element <key , info> after element it . | |
void | reverseItems (iterator itBegin, iterator itEnd) |
Reverses the items in the subsequence from itBegin to itEnd (inclusive). | |
Private Member Functions | |
const Element * | _locate (const KEY &key) const |
const Element * | _lookup (const KEY &key) const |
void | grow (int newHeight) |
void | initEmpty () |
void | insertElementAfterElement (Element *p, Element *q) |
int | randomHeightAndGrow () |
void | removeElement (Element *p) |
void | reverseElements (Element *p, Element *q) |
Private Attributes | |
CMP | m_comparer |
Element * | m_dummy |
dummy element representing the head and tail of the skiplist. | |
int | m_height |
current height of head/tail. | |
std::uniform_int_distribution | m_randomBits |
int | m_realHeight |
actual height of head/tail arrays. | |
std::minstd_rand | m_rng |
Random number generator. | |
int | m_size |
number of elements stored in the sequence. | |
Maintains a sequence of (key,info) pairs sorted by key.
Sorted sequences a implemented by doubly linked skiplists. Operations lookup, locate, insert, del, delItem take expected time O(log n), where n is the current size of the sequence.
Definition at line 66 of file SortedSequence.h.
using ogdf::SortedSequence< KEY, INFO, CMP >::const_iterator = SortedSequenceConstIterator<KEY, INFO, CMP> |
The const-iterator type for sorted sequences (bidirectional iterator).
Definition at line 128 of file SortedSequence.h.
using ogdf::SortedSequence< KEY, INFO, CMP >::const_reverse_iterator = SortedSequenceConstReverseIterator<KEY, INFO, CMP> |
The const reverse iterator type for sorted sequences (bidirectional iterator).
Definition at line 132 of file SortedSequence.h.
using ogdf::SortedSequence< KEY, INFO, CMP >::iterator = SortedSequenceIterator<KEY, INFO, CMP> |
The iterator type for sorted sequences (bidirectional iterator).
Definition at line 126 of file SortedSequence.h.
using ogdf::SortedSequence< KEY, INFO, CMP >::reverse_iterator = SortedSequenceReverseIterator<KEY, INFO, CMP> |
The reverse iterator type for sorted sequences (bidirectional iterator).
Definition at line 130 of file SortedSequence.h.
Constructs an initially empty sorted sequence.
Definition at line 135 of file SortedSequence.h.
ogdf::SortedSequence< KEY, INFO, CMP >::SortedSequence | ( | std::initializer_list< std::pair< KEY, INFO > > | initList | ) |
Constructs a sorted sequence containing the elements in initList
.
Definition at line 490 of file SortedSequence.h.
ogdf::SortedSequence< KEY, INFO, CMP >::SortedSequence | ( | const SortedSequence< KEY, INFO, CMP > & | S | ) |
Copy constructor.
Definition at line 498 of file SortedSequence.h.
ogdf::SortedSequence< KEY, INFO, CMP >::SortedSequence | ( | SortedSequence< KEY, INFO, CMP > && | S | ) |
Copy constructor (move semantics).
The sequence S
is empty afterwards.
Definition at line 509 of file SortedSequence.h.
|
inline |
Destructor.
Definition at line 153 of file SortedSequence.h.
|
private |
Definition at line 610 of file SortedSequence.h.
|
private |
Definition at line 580 of file SortedSequence.h.
|
inline |
Returns an iterator pointing to the first element.
Definition at line 768 of file SortedSequence.h.
|
inline |
Returns a const-iterator pointing to the first element.
Definition at line 774 of file SortedSequence.h.
|
inline |
Returns a const-iterator pointing to the first element.
Definition at line 178 of file SortedSequence.h.
|
inline |
Returns a const-iterator pointing to one past the last element.
Definition at line 187 of file SortedSequence.h.
|
inline |
Removes all elements from the sorted sequence.
Definition at line 274 of file SortedSequence.h.
|
inline |
Returns a const reverse iterator pointing to the last element.
Definition at line 196 of file SortedSequence.h.
|
inline |
Returns a const reverse iterator pointing to one before the first element.
Definition at line 205 of file SortedSequence.h.
Removes the element with key key
(if such an element exists).
Definition at line 700 of file SortedSequence.h.
Removes the element to which it
points from the sequence.
Definition at line 759 of file SortedSequence.h.
|
inline |
Returns true if the sequence is empty, false otherwise.
Definition at line 169 of file SortedSequence.h.
|
inline |
Returns an iterator pointing to one past the last element.
Definition at line 779 of file SortedSequence.h.
|
inline |
Returns a const-iterator pointing to one past the last element.
Definition at line 785 of file SortedSequence.h.
Definition at line 638 of file SortedSequence.h.
|
inlineprivate |
Definition at line 356 of file SortedSequence.h.
SortedSequence< KEY, INFO, CMP >::iterator ogdf::SortedSequence< KEY, INFO, CMP >::insert | ( | const KEY & | key, |
const INFO & | info | ||
) |
Updates information for key
if contained in sequence, or adds a new element <key
, info>
.
Definition at line 666 of file SortedSequence.h.
SortedSequence< KEY, INFO, CMP >::iterator ogdf::SortedSequence< KEY, INFO, CMP >::insertAfter | ( | iterator | it, |
const KEY & | key, | ||
const INFO & | info | ||
) |
Adds a new element <key
, info>
after element it
.
it
points to an element in the sequence that shall appear before <key
, info>
in the sorted sequence, and its current successor itSucc shall appear after <key
, info>
, i.e., it's
key is smaller than key
and itSucc's key is greater than key
. Definition at line 708 of file SortedSequence.h.
|
private |
Definition at line 721 of file SortedSequence.h.
SortedSequence< KEY, INFO, CMP >::iterator ogdf::SortedSequence< KEY, INFO, CMP >::locate | ( | const KEY & | key | ) |
Returns an iterator to the element < k1, i1 > such that k1 is minimal with k1 ≥ key
, or a null iterator if no such element exists.
Definition at line 626 of file SortedSequence.h.
SortedSequence< KEY, INFO, CMP >::const_iterator ogdf::SortedSequence< KEY, INFO, CMP >::locate | ( | const KEY & | key | ) | const |
Returns a const-iterator to the element < k1, i1 > such that k1 is minimal with k1 ≥ key
, or a null iterator if no such element exists.
Definition at line 632 of file SortedSequence.h.
SortedSequence< KEY, INFO, CMP >::iterator ogdf::SortedSequence< KEY, INFO, CMP >::lookup | ( | const KEY & | key | ) |
Returns an iterator to the element with key key
, or a null iterator if no such element exists.
Definition at line 598 of file SortedSequence.h.
SortedSequence< KEY, INFO, CMP >::const_iterator ogdf::SortedSequence< KEY, INFO, CMP >::lookup | ( | const KEY & | key | ) | const |
Returns a const-iterator to the element with key key
, or a null iterator if no such element exists.
Definition at line 604 of file SortedSequence.h.
|
inline |
Returns a reverse iterator to the element with maximal key if the sequence is not empty, an invalid reverse iterator otherwise.
Calling this method is equivalent to calling rbegin(), but has a more intuitive name.
Definition at line 248 of file SortedSequence.h.
|
inline |
Returns a const reverse iterator to the element with maximal key if the sequence is not empty, an invalid const reverse iterator otherwise.
Calling this method is equivalent to calling rbegin(), but has a more intuitive name.
Definition at line 255 of file SortedSequence.h.
|
inline |
Returns an iterator to the element with minimal key if the sequence is not empty, an invalid iterator otherwise.
Calling this method is equivalent to calling begin(), but has a more intuitive name.
Definition at line 234 of file SortedSequence.h.
|
inline |
Returns a const-iterator to the element with minimal key if the sequence is not empty, an invalid const-iterator otherwise.
Calling this method is equivalent to calling begin(), but has a more intuitive name.
Definition at line 241 of file SortedSequence.h.
|
inline |
Returns false if the keys stored in this sequence equal the keys in S
, true otherwise.
Uses the given comparer object to compare keys.
Definition at line 312 of file SortedSequence.h.
SortedSequence< KEY, INFO, CMP > & ogdf::SortedSequence< KEY, INFO, CMP >::operator= | ( | const SortedSequence< KEY, INFO, CMP > & | S | ) |
Assignment operator.
Definition at line 524 of file SortedSequence.h.
SortedSequence< KEY, INFO, CMP > & ogdf::SortedSequence< KEY, INFO, CMP >::operator= | ( | SortedSequence< KEY, INFO, CMP > && | S | ) |
Assignment operator (move semantics).
The sequence S
is empty afterwards.
Definition at line 537 of file SortedSequence.h.
bool ogdf::SortedSequence< KEY, INFO, CMP >::operator== | ( | const SortedSequence< KEY, INFO, CMP > & | S | ) |
Returns true if the keys stored in this sequence equal the keys in S
, false otherwise.
Uses the given comparer object to compare keys.
Definition at line 562 of file SortedSequence.h.
|
private |
Definition at line 652 of file SortedSequence.h.
|
inline |
Returns a reverse iterator pointing to the last element.
Definition at line 791 of file SortedSequence.h.
|
inline |
Returns a const reverse iterator pointing to the last element.
Definition at line 797 of file SortedSequence.h.
Definition at line 747 of file SortedSequence.h.
|
inline |
Returns a reverse iterator pointing to one before the first element.
Definition at line 802 of file SortedSequence.h.
|
inline |
Returns a const reverse iterator pointing to one before the first element.
Definition at line 808 of file SortedSequence.h.
Definition at line 737 of file SortedSequence.h.
|
inline |
Reverses the items in the subsequence from itBegin
to itEnd
(inclusive).
itBegin
appears before itEnd
in the sequence.Definition at line 340 of file SortedSequence.h.
|
inline |
Returns the current size of the sequence, i.e., the number of stored elements.
Definition at line 166 of file SortedSequence.h.
Definition at line 808 of file SortedSequence.h.
Definition at line 808 of file SortedSequence.h.
Definition at line 808 of file SortedSequence.h.
Definition at line 808 of file SortedSequence.h.
|
private |
Definition at line 347 of file SortedSequence.h.
|
private |
dummy element representing the head and tail of the skiplist.
Definition at line 349 of file SortedSequence.h.
|
private |
current height of head/tail.
Definition at line 350 of file SortedSequence.h.
|
private |
Definition at line 354 of file SortedSequence.h.
|
private |
actual height of head/tail arrays.
Definition at line 351 of file SortedSequence.h.
|
private |
Random number generator.
Definition at line 353 of file SortedSequence.h.
|
private |
number of elements stored in the sequence.
Definition at line 348 of file SortedSequence.h.