Segment Tree¶
API Reference¶
-
template <typename _Key, typename _Value>
classsegment_tree
¶ Public Types
-
typedef _Key
key_type
¶
-
typedef _Value
value_type
¶
-
typedef size_t
size_type
¶
-
typedef std::vector<value_type>
search_result_type
¶
-
typedef std::vector<value_type>
data_chain_type
¶
-
typedef std::unordered_map<value_type, std::pair<key_type, key_type>>
segment_map_type
¶
-
typedef std::map<value_type, std::pair<key_type, key_type>>
sorted_segment_map_type
¶
-
typedef __st::node<segment_tree>
node
¶
-
typedef __st::nonleaf_node<segment_tree>
nonleaf_node
¶
Public Functions
-
segment_tree
()¶
-
segment_tree
(const segment_tree &r)¶
-
~segment_tree
()¶
-
bool
operator==
(const segment_tree &r) const¶ Equality between two segment_tree instances is evaluated by comparing the segments that they store. The trees are not compared.
-
bool
operator!=
(const segment_tree &r) const¶
-
bool
is_tree_valid
() const¶ Check whether or not the internal tree is in a valid state. The tree must be valid in order to perform searches.
- Return
- true if the tree is valid, false otherwise.
-
void
build_tree
()¶ Build or re-build tree based on the current set of segments.
-
bool
insert
(key_type begin_key, key_type end_key, value_type pdata)¶ Insert a new segment.
- Parameters
begin_key
: begin point of the segment. The value is inclusive.end_key
: end point of the segment. The value is non-inclusive.pdata
: pointer to the data instance associated with this segment. Note that the caller must manage the life cycle of the data instance.
-
bool
search
(key_type point, search_result_type &result) const¶ Search the tree and collect all segments that include a specified point.
- Return
- true if the search is performed successfully, false if the search has ended prematurely due to error conditions.
- Parameters
point
: specified point valueresult
: doubly-linked list of data instances associated with the segments that include the specified point. Note that the search result gets appended to the list; the list will not get emptied on each search. It is caller’s responsibility to empty the list before passing it to this method in case the caller so desires.
-
search_result
search
(key_type point) const¶ Search the tree and collect all segments that include a specified point.
- Return
- object containing the result of the search, which can be accessed via iterator.
- Parameters
point
: specified point value
-
void
remove
(value_type value)¶ Remove a segment that matches by the value. This will not invalidate the tree; however, if you have removed lots of segments, you might want to re-build the tree to shrink its size.
- Parameters
value
: value to remove a segment by.
-
void
clear
()¶ Remove all segments data.
-
size_t
size
() const¶ Return the number of segments currently stored in this container.
-
bool
empty
() const¶ Return whether or not the container stores any segments or none at all.
-
size_t
leaf_size
() const¶ Return the number of leaf nodes.
- Return
- number of leaf nodes.
-
struct
dispose_handler
¶
-
struct
fill_nonleaf_value_handler
¶ Public Functions
-
template<>
voidoperator()
(__st::nonleaf_node<segment_tree> &_self, const __st::node_base *left_node, const __st::node_base *right_node)¶
-
template<>
-
struct
init_handler
¶
-
struct
nonleaf_value_type
¶ Public Functions
-
template<>
booloperator==
(const nonleaf_value_type &r) const¶
-
template<>
-
class
search_result
: public mdds::segment_tree<_Key, _Value>::search_result_base¶ Public Functions
-
template<>
search_result::iteratorbegin
()¶
-
template<>
search_result::iteratorend
()¶
-
class
iterator
: public mdds::segment_tree<_Key, _Value>::iterator_base¶ Public Functions
-
template<>
iterator
()¶
Friends
-
friend
mdds::segment_tree::segment_tree< _Key, _Value >::search_result
-
template<>
-
template<>
-
class
search_result_inserter
: public std::unary_function<data_chain_type *, void>¶
-
class
search_result_vector_inserter
: public std::unary_function<data_chain_type *, void>¶
-
typedef _Key