1 #ifndef _SPICA_KDTREE_H_
2 #define _SPICA_KDTREE_H_
19 KnnQuery(
int type_,
double epsilon_,
int k_)
20 : type(static_cast<KnnSearchType>(type_))
36 void add(
const Ty& point);
37 void construct(
const std::vector<Ty>& points);
38 void knnSearch(
const Ty& point,
const KnnQuery& query, std::vector<Ty>* results)
const;
47 OrderedType(
const double dist_,
const Ty& t_)
53 bool operator<(
const OrderedType& t)
const {
54 return this->dist < t.dist;
56 bool operator>(
const OrderedType& t)
const {
57 return this->dist > t.dist;
61 typedef std::priority_queue<OrderedType, std::vector<OrderedType>, std::less<OrderedType> > PriorityQueue;
78 struct AxisComparator {
80 explicit AxisComparator(
int d) : dim(d) {}
81 bool operator()(
const Ty* t1,
const Ty* t2) {
82 return (*t1)[dim] < (*t2)[dim];
87 KdTreeNode* constructRec(std::vector<const Ty*>& points,
const int nodeID,
const int startID,
const int endID,
const int dim);
88 KdTreeNode* addRec(KdTreeNode* node,
const Ty& point,
int dim);
89 void knnSearchRec(KdTreeNode* node,
const Ty& point,
KnnQuery& query, PriorityQueue* results)
const;
91 static double distance(
const Ty& p1,
const Ty& p2);
99 #include "kdtree_detail.h"
101 #endif // _SPICA_KDTREE_H_