Advertisement
Guest User

Untitled

a guest
Feb 23rd, 2019
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.61 KB | None | 0 0
  1.     template <class T, double(T::*Accessor)(void)const>
  2.     struct Compare {
  3.         bool operator()(const T &a, const T &b) {
  4.             return (a.*Accessor)() < (b.*Accessor)();
  5.         }
  6.     };
  7.  
  8.     struct NormalizeStruct {
  9.         double min;
  10.         double diff;
  11.  
  12.         NormalizeStruct(double min,
  13.                         double diff) : min(min), diff(diff)
  14.             { /* empty */ }
  15.     };
  16.  
  17.     template <class T, double(T::*Accessor)(void)const>
  18.     NormalizeStruct normalize_one_cat(const std::vector<T> &vec_for_normalization) {
  19.         Compare<T, Accessor> cmp;
  20.         double max_el = ((*max_element(vec_for_normalization.begin(),
  21.                                        vec_for_normalization.end(),
  22.                                        cmp)).*Accessor)();
  23.         double min_el = ((*min_element(vec_for_normalization.begin(),
  24.                                        vec_for_normalization.end(),
  25.                                        cmp)).*Accessor)();
  26.  
  27.         double diff_el = max_el - min_el;
  28.  
  29.         return NormalizeStruct(min_el, diff_el);
  30.     }
  31.  
  32.     std::vector<SpamString> normalize(const std::vector<SpamString> &spam_strings) {
  33.         std::vector<SpamString> normalize_strings;
  34.  
  35.         NormalizeStruct all = normalize_one_cat<SpamString,
  36.                                                 &SpamString::getAll>(spam_strings);
  37.  
  38.         NormalizeStruct uppers_all = normalize_one_cat<SpamString,
  39.                                                        &SpamString::getUppersAll>(spam_strings);
  40.  
  41.         NormalizeStruct marks_all = normalize_one_cat<SpamString,
  42.                                                       &SpamString::getMarksAll>(spam_strings);
  43.  
  44.         NormalizeStruct tabs_all = normalize_one_cat<SpamString,
  45.                                                      &SpamString::getTabsAll>(spam_strings);
  46.  
  47.         NormalizeStruct nums_all = normalize_one_cat<SpamString,
  48.                                                      &SpamString::getNumsAll>(spam_strings);
  49.  
  50.         for(vector<SpamString>::const_iterator it = spam_strings.begin();
  51.             it != spam_strings.end(); ++it)
  52.             normalize_strings.push_back(
  53.                 SpamString((it->getAll()-all.min)/all.diff,
  54.                            (it->getUppersAll()-uppers_all.min)/uppers_all.diff,
  55.                            (it->getMarksAll()-marks_all.min)/marks_all.diff,
  56.                            (it->getTabsAll()-tabs_all.min)/tabs_all.diff,
  57.                            (it->getNumsAll()-nums_all.min)/nums_all.diff,
  58.                            it->getType()));
  59.  
  60.         return normalize_strings;
  61.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement