|
typedef orbtree< NodeAllocator, Compare, NVFunc, false, simple >::value_type | value_type |
|
typedef orbtree< NodeAllocator, Compare, NVFunc, false, simple >::key_type | key_type |
|
typedef orbtree< NodeAllocator, Compare, NVFunc, false, simple >::size_type | size_type |
|
typedef orbtree< NodeAllocator, Compare, NVFunc, false, simple >::difference_type | difference_type |
|
typedef orbtree< NodeAllocator, Compare, NVFunc, false, simple >::iterator | iterator |
|
typedef orbtree< NodeAllocator, Compare, NVFunc, false, simple >::const_iterator | const_iterator |
|
typedef NodeAllocator::KeyValue::MappedType | mapped_type |
| type of values stored in this map
|
|
typedef NodeAllocator::KeyValue::ValueType | value_type |
| Values stored in this tree. Either the key (for sets) or an std::pair or orbtree::trivial_pair of key and value.
|
|
typedef NodeAllocator::KeyValue::KeyType | key_type |
| Key type of nodes that determines ordering.
|
|
typedef NodeAllocator::NVType | NVType |
| Type of values associated by nodes (calculated by NVFunc)
|
|
typedef size_t | size_type |
|
typedef size_t | difference_type |
|
typedef iterator_base< true > | const_iterator |
| iterator that does not allow modification
|
|
typedef std::conditional< NodeAllocator::KeyValue::keyonly, iterator_base< true >, iterator_base< false > >::type | iterator |
| iteraror that allows the modification of the stored value (for maps)
|
|
typedef std::conditional< multi, iterator, std::pair< iterator, bool > >::type | insert_type |
| return type of insert functions
|
|
typedef NodeAllocator::NVType | NVType |
| Type the function NVFunc returns.
|
|
|
| orbtreemap (const NVFunc &f_=NVFunc(), const Compare &c_=Compare()) |
|
| orbtreemap (NVFunc &&f_, const Compare &c_=Compare()) |
|
template<class T > |
| orbtreemap (const T &t, const Compare &c_=Compare()) |
|
const mapped_type & | at (const key_type &k) const |
| Access mapped value for a given key, throws an exception if key is not found. More...
|
|
template<class K > |
const mapped_type & | at (const K &k) const |
| Access mapped value for a key that compares equal to k, throws an exception if not such key is found. More...
|
|
const mapped_type & | operator[] (const key_type &k) |
| Access mapped value for a given key, inserts a new element with the default value if not found. More...
|
|
bool | set_value (const key_type &k, const mapped_type &v) |
| set value associated with the given key or insert new element More...
|
|
bool | set_value (key_type &&k, const mapped_type &v) |
| set value associated with the given key or insert new element More...
|
|
bool | set_value (const key_type &k, mapped_type &&v) |
| set value associated with the given key or insert new element More...
|
|
bool | set_value (key_type &&k, mapped_type &&v) |
| set value associated with the given key or insert new element More...
|
|
void | update_value (const key_type &k, const mapped_type &v) |
| update the value of an existing element – throws exception if the key does not exist
|
|
void | update_value (const key_type &k, mapped_type &&v) |
| update the value of an existing element – throws exception if the key does not exist
|
|
| orbtree (const NVFunc &f_=NVFunc(), const Compare &c_=Compare()) |
|
| orbtree (NVFunc &&f_, const Compare &c_=Compare()) |
|
| orbtree (const T &t, const Compare &c_=Compare()) |
|
iterator | begin () |
|
const_iterator | begin () const |
| get an iterator to the beginning (node with the lowest key value)
|
|
const_iterator | cbegin () const |
| get an iterator to the beginning (node with the lowest key value)
|
|
iterator | end () |
| get an iterator to the beginning (node with the lowest key value)
|
|
const_iterator | end () const |
| get the past-the-end iterator
|
|
const_iterator | cend () const |
| get the past-the-end iterator
|
|
bool | empty () const |
| get the past-the-end iterator
|
|
size_t | size () const |
| check if the tree is empty
|
|
constexpr size_t | max_size () const |
| return the maximum possible number of elements More...
|
|
insert_type | insert (const value_type &v) |
| Insert new element. More...
|
|
insert_type | insert (value_type &&v) |
| Insert new element. More...
|
|
iterator | insert (const_iterator hint, const value_type &v) |
| Insert new element with hint. More...
|
|
iterator | insert (const_iterator hint, value_type &&v) |
| iteraror that allows the modification of the stored value (for maps) insert(const_iterator hint, const value_type& v) More...
|
|
void | insert (InputIt first, InputIt last) |
| insert all elements in the range [first,last)
|
|
insert_type | emplace (Args &&... args) |
| construct new element in-place
|
|
iterator | emplace_hint (const_iterator hint, Args &&... args) |
| construct new element in-place, using the given hint in a same way as insert() with a hint
|
|
iterator | erase (const_iterator pos) |
| erase element pointed to by the given iterator; returns the element after it (in order)
|
|
iterator | erase (const_iterator first, const_iterator last) |
| erase elements in the range [first,last); returns last
|
|
size_t | erase (const key_type &k) |
| erase all elements with the given key; returns the number of elements erased
|
|
size_t | count (const key_type &k) const |
| count number of elements with key
|
|
size_t | count (const K &k) const |
| count the number of elements whose key compares equal to k
|
|
iterator | find (const key_type &k) |
| Find an element with the given key and return an iterator to it. More...
|
|
const_iterator | find (const key_type &k) const |
| iteraror that allows the modification of the stored value (for maps) find(const key_type& k) More...
|
|
iterator | find (const K &k) |
| iteraror that allows the modification of the stored value (for maps) find(const key_type& k) More...
|
|
const_iterator | find (const K &k) const |
| iteraror that allows the modification of the stored value (for maps) find(const key_type& k) More...
|
|
iterator | lower_bound (const key_type &k) |
| return an iterator to the first element with key not less than k
|
|
const_iterator | lower_bound (const key_type &k) const |
| return an iterator to the first element with key not less than k
|
|
iterator | lower_bound (const K &k) |
| return an iterator to the first element with key not less than k
|
|
const_iterator | lower_bound (const K &k) const |
| return an iterator to the first element with key not less than k
|
|
iterator | upper_bound (const key_type &k) |
| return an iterator to the first element with key greater than k
|
|
const_iterator | upper_bound (const key_type &k) const |
| return an iterator to the first element with key greater than k
|
|
iterator | upper_bound (const K &k) |
| return an iterator to the first element with key greater than k
|
|
const_iterator | upper_bound (const K &k) const |
| return an iterator to the first element with key greater than k
|
|
std::pair< iterator, iterator > | equal_range (const key_type &k) |
| return a pair of iterators corresponding to the range of all elements with key equal to k
|
|
std::pair< const_iterator, const_iterator > | equal_range (const key_type &k) const |
| return a pair of iterators corresponding to the range of all elements with key equal to k
|
|
std::pair< iterator, iterator > | equal_range (const K &k) |
| return a pair of iterators corresponding to the range of all elements with keys that compares equal to k
|
|
std::pair< const_iterator, const_iterator > | equal_range (const K &k) const |
| return a pair of iterators corresponding to the range of all elements with keys that compares equal to k
|
|
bool | contains (const key_type &k) const |
| returns if an element with key equivalent to k exists in this tree
|
|
bool | contains (const K &k) const |
| returns if an element with key equivalent to k exists in this tree
|
|
void | get_sum_node (const_iterator it, typename std::enable_if<!simple_, NVType * >::type res) const |
| Calculate partial sum of the weights of nodes that come before the one pointed to by it. More...
|
|
NVType | get_sum_node (typename std::enable_if< simple_, const_iterator >::type it) const |
| Calculate partial sum of nodes that come before the one pointed to by it. More...
|
|
void | get_sum (const key_type &k, typename std::enable_if<!simple_, NVType * >::type res) const |
| Calculate partial sum of weights for keys that come before k. More...
|
|
NVType | get_sum (typename std::enable_if< simple_, const key_type & >::type k) const |
| Calculate partial sum of weights for keys that come before k. More...
|
|
void | get_sum (const K &k, typename std::enable_if<!simple_, NVType * >::type res) const |
| Calculate partial sum of weights for keys that come before k. More...
|
|
NVType | get_sum (typename std::enable_if< simple_, const K & >::type k) const |
| Calculate partial sum of weights for keys that come before k. More...
|
|
void | get_norm (typename std::enable_if<!simple_, NVType * >::type res) const |
| Calculate normalization, i.e. sum of all weights. Equivalent to get_sum(cend(),res).
|
|
NVType | get_norm (typename std::enable_if< simple_, void * >::type k=0) const |
| Calculate normalization, i.e. sum of all weights. Equivalent to get_sum(cend()).
|
|
void | clear () |
| erase all nodes
|
|
template<class K > |
void | get_sum_fv (const K &k, NVType *res) const |
| get the generalized rank for a key, i.e. the sum of NVFunc for all nodes with node.key < k
|
|
void | get_sum_fv_node (NodeHandle x, NVType *res) const |
| get the generalized rank for a given node, i.e. the sum of NVFunv for all nodes before it in order
|
|
void | get_norm_fv (NVType *res) const |
| get the normalization factor, i.e. the sum of all keys
|
|
void | check_tree (double epsilon=-1.0) const |
| check that the tree is valid More...
|
|
template<class... T> |
auto | emplace (T &&... t) -> std::pair< NodeHandle, bool > |
|
template<class... T> |
auto | emplace_hint (NodeHandle hint, T &&... t) -> NodeHandle |
|
|
std::enable_if< multi_, insert_type >::type | insert_helper (const value_type &v) |
|
std::enable_if<!multi_, insert_type >::type | insert_helper (const value_type &v) |
|
std::enable_if< multi_, insert_type >::type | insert_helper (value_type &&v) |
|
std::enable_if<!multi_, insert_type >::type | insert_helper (value_type &&v) |
|
std::enable_if< multi_, insert_type >::type | emplace_helper (Args &... args) |
|
std::enable_if<!multi_, insert_type >::type | emplace_helper (Args &... args) |
|
void | NVAdd (NVType *x, const NVType *y) const |
| function to add NVType values; checks for overflow and throws exception in the case of integral types
|
|
void | NVSubtract (NVType *x, const NVType *y) const |
| function to subtract NVType values; checks for overflow and throws exception in the case of integral types
|
|
void | create_sentinels () |
|
Node & | get_node (NodeHandle n) |
| convenience function that returns node object for a node handle
|
|
const Node & | get_node (NodeHandle n) const |
| convenience function that returns node object for a node handle
|
|
NodeHandle | root () const |
| handle of root sentinel
|
|
NodeHandle | nil () const |
| handle of nil sentinel
|
|
| orbtree_base (const NVFunc &f_, const Compare &c_) |
|
| orbtree_base (NVFunc &&f_, const Compare &c_) |
|
template<class T > |
| orbtree_base (const T &t, const Compare &c_) |
|
std::pair< NodeHandle, bool > | insert (ValueType &&kv) |
| Insert new element. More...
|
|
std::pair< NodeHandle, bool > | insert (const ValueType &kv) |
| Insert new element. More...
|
|
NodeHandle | insert (NodeHandle hint, ValueType &&kv) |
| Insert new element with hint. More...
|
|
NodeHandle | insert (NodeHandle hint, const ValueType &kv) |
| Insert new element with hint. More...
|
|
template<class... T> |
std::pair< NodeHandle, bool > | emplace (T &&... t) |
| Construct new element in place. More...
|
|
template<class... T> |
NodeHandle | emplace_hint (NodeHandle hint, T &&... t) |
| Construct new element in place with hint. More...
|
|
bool | insert_search (const KeyType &k, NodeHandle &n, bool &insert_left) const |
| helper for insert – find the location where to insert More...
|
|
bool | insert_search_hint (NodeHandle hint, const KeyType &k, NodeHandle &n, bool &insert_left) const |
| helper for insert – find the location where to insert More...
|
|
void | insert_helper (NodeHandle n, NodeHandle n1, bool insert_left) |
| helper function to do the real work for insert More...
|
|
template<class K > |
auto | find (const K &key) const -> NodeHandle |
| find any node with the given key More...
|
|
template<class K > |
auto | lower_bound (const K &key) const -> NodeHandle |
| find the first node not less than the given key – returns nil if none found
|
|
template<class K > |
auto | upper_bound (const K &key) const -> NodeHandle |
| find the first node larger than the given key – returns nil if none found
|
|
const KeyType & | get_node_key (NodeHandle n) const |
| convenience function to get the key of a node
|
|
bool | compare_key_equals (NodeHandle n, const KeyType &k) const |
| helper for erase to compare elements
|
|
void | get_node_grvalue (NodeHandle n, NVType *res) const |
| get the value of NVFunc for the given node More...
|
|
NodeHandle | first () const |
| get first node (or nil)
|
|
NodeHandle | last () const |
| get last node (or nil)
|
|
NodeHandle | next (NodeHandle n) const |
| get node after n (or nil) – note: next(nil) == nil
|
|
NodeHandle | previous (NodeHandle n) const |
| get node before n (or nil) – note: previous(nil) == last() to make it easier to implement end() iterator
|
|
NodeHandle | erase (NodeHandle n) |
| remove the given node – return the next node (i.e. next(n) before deleting n)
|
|
Node & | get_left (NodeHandle n) |
| convenience helper to get node object that is the left child of the given node handle
|
|
const Node & | get_left (NodeHandle n) const |
| convenience helper to get node object that is the left child of the given node handle
|
|
Node & | get_right (NodeHandle n) |
| convenience helper to get node object that is the right child of the given node handle
|
|
const Node & | get_right (NodeHandle n) const |
| convenience helper to get node object that is the right child of the given node handle
|
|
Node & | get_parent (NodeHandle n) |
| convenience helper to get node object that is the parent of the given node handle
|
|
const Node & | get_parent (NodeHandle n) const |
| convenience helper to get node object that is the parent of the given node handle
|
|
NodeHandle | get_sibling_handle (NodeHandle n) const |
| convenience helper to get the handle of a node's sibling (i.e. parent's other child)
|
|
Node & | get_sibling (NodeHandle n) |
| convenience helper to get the node object of a node's sibling (i.e. parent's other child)
|
|
const Node & | get_sibling (NodeHandle n) const |
| convenience helper to get the node object of a node's sibling (i.e. parent's other child)
|
|
bool | is_left_side (NodeHandle n) const |
| check which side child is n (i.e. returns true if n is the left child of its parent) – requires that n != root
|
|
void | update_sum (NodeHandle n) |
| update the sum only inside n
|
|
void | update_sum_r (NodeHandle n) |
| update the sum recursively up the tree
|
|
template<class KeyValue_ = KeyValue> |
void | update_value (NodeHandle n, typename KeyValue_::MappedType const &v) |
| update value in a node – only if this is a map; update sum recursively based on it as well
|
|
template<class KeyValue_ = KeyValue> |
void | update_value (NodeHandle n, typename KeyValue_::MappedType &&v) |
| update value in a node – only if this is a map; update sum recursively based on it as well
|
|
void | rotate_left (NodeHandle x) |
| left rotate More...
|
|
void | rotate_right (NodeHandle x) |
| right rotate More...
|
|
void | rotate_parent (NodeHandle x) |
| rotate by parent of x (x takes parent's place), this calls either rotate_left() or rotate_right() with the parent of x
|
|
void | check_tree_r (double epsilon, NodeHandle x, size_t black_count, size_t &previous_black_count) const |
| recursive helper for check_tree(double)
|
|
| NVFunc_wrapper (const NVFunc &f_) |
|
| NVFunc_wrapper (NVFunc &&f_) |
|
template<class T > |
| NVFunc_wrapper (const T &t) |
|
size_t | size1 |
| keep track of the number of inserted elements
|
|
NVFunc & | f |
|
Compare | c |
|
NVFunc | f |
|
template<class NodeAllocator, class Compare, class NVFunc, bool simple = false>
class orbtree::orbtreemap< NodeAllocator, Compare, NVFunc, simple >
Base class with map-specific function. It is recommended to use the specializations simple_map, simple_mapC, simple_multimap, simple_multimapC, orbmap, orbmapC, orbmultimap and orbmultimapC to define and instantiate this class instead of this interface directly.
Provides implementation for map-specific interface.
@tparam NodeAllocator internal base class to store nodes
- Template Parameters
-
Comapre | comparison functor |
NVFunc | function that calculates values associated with elements based on key and value |