CGAL 5.0.3 - dD Spatial Searching
|
#include <CGAL/Kd_tree.h>
The class Kd_tree
defines a k-d
tree.
Traits | must be a model of the concept SearchTraits , for example Search_traits_2<Simple_cartesian<double> > . |
Splitter | must be a model for the concept Splitter . It defaults to Sliding_midpoint<Traits> . |
UseExtendedNode | must be Tag_true , if the tree shall be built with extended nodes, and Tag_false otherwise. |
CGAL::Kd_tree_node<Traits>
CGAL::Search_traits_2<Kernel>
CGAL::Search_traits_3<Kernel>
CGAL::Search_traits<FT_,Point,CartesianIterator,ConstructCartesianIterator>
Types | |
typedef unspecified_type | D |
Dimension tag. | |
typedef Traits::Point_d | Point_d |
Point class. | |
typedef Traits::FT | FT |
Number type. | |
typedef unspecified_type | Splitter |
Splitter type. | |
typedef unspecified_type | iterator |
Bidirectional const iterator with value type Point_d that allows to enumerate all points in the tree. | |
typedef unspecified_type | Node_handle |
A handle with value type Kd_tree_node<Traits,Splitter> . | |
typedef unspecified_type | Node_const_handle |
A const handle with value type Kd_tree_node<Traits,Splitter> . | |
typedef unspecified_type | Point_d_iterator |
Random access const iterator with value type const Point_d* . | |
typedef unspecified_type | size_type |
A type that counts the number of elements in a k-d tree. | |
Creation | |
Kd_tree (Splitter s=Splitter(), Traits t=Traits()) | |
Constructs an empty k-d tree. | |
template<class InputIterator > | |
Kd_tree (InputIterator first, InputIterator beyond, Splitter s=Splitter(), Traits t=Traits()) | |
Constructs a k-d tree on the elements from the sequence [first, beyond) using the splitting rule implemented by s . More... | |
void | build () |
The constructor does not build the internal data structure, and it is also not updated after calls to insert() . More... | |
void | invalidate_build () |
This clears the internal data structure, which then gets rebuilt either by an explicit call to build() or implicitly by the next query or removal. More... | |
Operations | |
void | insert (Point_d p) |
Inserts the point p in the k-d tree. More... | |
template<class InputIterator > | |
void | insert (InputIterator first, InputIterator beyond) |
Inserts the elements from the sequence [first, beyond) in the k-d tree. More... | |
template<class Identify_point > | |
void | remove (Point_d p, Identify_point equal_to_p) |
Removes the point p from the k-d tree. More... | |
void | remove (Point_d p) |
Removes point p , calling the 2-argument function remove() with a functor that simply compares coordinates. | |
void | reserve (size_t size) |
size_t | capacity () |
template<class FuzzyQueryItem > | |
boost::optional< Point_d > | search_any_point (FuzzyQueryItem q) const |
Reports any point that is approximately contained by q . More... | |
template<class OutputIterator , class FuzzyQueryItem > | |
OutputIterator | search (OutputIterator it, FuzzyQueryItem q) const |
Reports the points that are approximately contained by q . More... | |
iterator | begin () const |
Returns a const iterator to the first point in the tree. More... | |
iterator | end () const |
Returns the appropriate past-the-end const iterator. | |
void | clear () |
Removes all points from the k-d tree. | |
size_type | size () const |
Returns the number of points that are stored in the tree. | |
Traits | traits () const |
return the instance of the traits used to construct the tree. | |
Node_handle | root () |
Returns a handle to the root node of the tree. | |
Node_const_handle | root () const |
Returns a const handle to the root node of the tree. | |
const Kd_tree_rectangle< FT, D > & | bounding_box () const |
Returns a const reference to the bounding box of the root node of the tree. | |
std::ostream & | statistics (std::ostream &s) const |
Inserts statistics of the tree into the output stream s . | |
CGAL::Kd_tree< Traits, Splitter, UseExtendedNode >::Kd_tree | ( | InputIterator | first, |
InputIterator | beyond, | ||
Splitter | s = Splitter() , |
||
Traits | t = Traits() |
||
) |
Constructs a k-d
tree on the elements from the sequence [first, beyond)
using the splitting rule implemented by s
.
The value type of the InputIterator
must be Point_d
.
iterator CGAL::Kd_tree< Traits, Splitter, UseExtendedNode >::begin | ( | ) | const |
void CGAL::Kd_tree< Traits, Splitter, UseExtendedNode >::build | ( | ) |
The constructor does not build the internal data structure, and it is also not updated after calls to insert()
.
The method build()
is called implicitly at the first call to a query or removal member function. You can call build()
explicitly to ensure that the next call to query functions will not trigger the reconstruction of the data structure.
void CGAL::Kd_tree< Traits, Splitter, UseExtendedNode >::insert | ( | Point_d | p | ) |
Inserts the point p
in the k-d
tree.
build()
, automatically triggers a rebuild of the whole structure. void CGAL::Kd_tree< Traits, Splitter, UseExtendedNode >::insert | ( | InputIterator | first, |
InputIterator | beyond | ||
) |
Inserts the elements from the sequence [first, beyond)
in the k-d
tree.
The value type of the InputIterator
must be Point_d
.
void CGAL::Kd_tree< Traits, Splitter, UseExtendedNode >::invalidate_build | ( | ) |
This clears the internal data structure, which then gets rebuilt either by an explicit call to build()
or implicitly by the next query or removal.
The only reason to call this function explicitly is to rebalance the tree after some number of removals.
void CGAL::Kd_tree< Traits, Splitter, UseExtendedNode >::remove | ( | Point_d | p, |
Identify_point | equal_to_p | ||
) |
Removes the point p
from the k-d
tree.
It uses equal_to_p
to identify the point after locating it, which can matter in particular when 2 points are in the same place. Identify_point
is a unary functor that takes a Point_d
and returns a bool
. This is a limited and naive implementation that does not rebalance the tree. On the other hand, the tree remains valid and ready for queries. If the internal data structure is not already built, for instance because the last operation was an insertion, it first calls build()
.
OutputIterator CGAL::Kd_tree< Traits, Splitter, UseExtendedNode >::search | ( | OutputIterator | it, |
FuzzyQueryItem | q | ||
) | const |
Reports the points that are approximately contained by q
.
The types FuzzyQueryItem::Point_d
and Point_d
must be equivalent. To use this function Traits
must be a model of the concept RangeSearchTraits
.
boost::optional<Point_d> CGAL::Kd_tree< Traits, Splitter, UseExtendedNode >::search_any_point | ( | FuzzyQueryItem | q | ) | const |
Reports any point that is approximately contained by q
.
The types FuzzyQueryItem::Point_d
and Point_d
must be equivalent. To use this function Traits
must be a model of the concept RangeSearchTraits
.