CluE  1.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
pointsetdistance.h
Go to the documentation of this file.
1 #ifndef POINTSETDISTANCE_H
2 #define POINTSETDISTANCE_H
3 
4 #include "../base/dissimilaritymeasure.h"
5 
6 namespace CluE
7 {
8 
14 template<typename T> class PointSetDistance
15 {
16 public:
17  PointSetDistance(DissimilarityMeasure<T> const & measure, std::set<T*> const & pointSet) :
18  measure(measure),
19  pointSet(pointSet)
20  {
21  }
22 
23  bool operator() (T const * const & obj1, T const * const & obj2);
24 
25 private:
27  std::set<T*> const & pointSet;
28 };
29 
30 template<typename T> bool PointSetDistance<T>::operator() (T const * const & obj1, T const * const & obj2)
31 {
32  if(pointSet.size() == 0)
33  return true;
34 
35  double obj1min = measure.dissimilarity(*obj1, **pointSet.begin());
36  double obj2min = measure.dissimilarity(*obj2, **pointSet.begin());
37  for(typename std::set<T*>::iterator it = pointSet.begin()++; it != pointSet.end(); it++)
38  {
39  double candidate1 = measure.dissimilarity(*obj1, **it);
40  if(candidate1 < obj1min)
41  obj1min = candidate1;
42  double candidate2 = measure.dissimilarity(*obj2, **it);
43  if(candidate2 < obj2min)
44  obj2min = candidate2;
45  }
46 
47  return obj1min < obj2min;
48 }
49 
50 }
51 
52 #endif
Calculates the (minimum) distance between a point and a set of points.
bool operator()(T const *const &obj1, T const *const &obj2)
PointSetDistance(DissimilarityMeasure< T > const &measure, std::set< T * > const &pointSet)
Abstract base class for dissimilarity measurement.
std::set< T * > const & pointSet
DissimilarityMeasure< T > const & measure