Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- template <class T, double(T::*Accessor)(void)const>
- struct Compare {
- bool operator()(const T &a, const T &b) {
- return (a.*Accessor)() < (b.*Accessor)();
- }
- };
- struct NormalizeStruct {
- double min;
- double diff;
- NormalizeStruct(double min,
- double diff) : min(min), diff(diff)
- { /* empty */ }
- };
- template <class T, double(T::*Accessor)(void)const>
- NormalizeStruct normalize_one_cat(const std::vector<T> &vec_for_normalization) {
- Compare<T, Accessor> cmp;
- double max_el = ((*max_element(vec_for_normalization.begin(),
- vec_for_normalization.end(),
- cmp)).*Accessor)();
- double min_el = ((*min_element(vec_for_normalization.begin(),
- vec_for_normalization.end(),
- cmp)).*Accessor)();
- double diff_el = max_el - min_el;
- return NormalizeStruct(min_el, diff_el);
- }
- std::vector<SpamString> normalize(const std::vector<SpamString> &spam_strings) {
- std::vector<SpamString> normalize_strings;
- NormalizeStruct all = normalize_one_cat<SpamString,
- &SpamString::getAll>(spam_strings);
- NormalizeStruct uppers_all = normalize_one_cat<SpamString,
- &SpamString::getUppersAll>(spam_strings);
- NormalizeStruct marks_all = normalize_one_cat<SpamString,
- &SpamString::getMarksAll>(spam_strings);
- NormalizeStruct tabs_all = normalize_one_cat<SpamString,
- &SpamString::getTabsAll>(spam_strings);
- NormalizeStruct nums_all = normalize_one_cat<SpamString,
- &SpamString::getNumsAll>(spam_strings);
- for(vector<SpamString>::const_iterator it = spam_strings.begin();
- it != spam_strings.end(); ++it)
- normalize_strings.push_back(
- SpamString((it->getAll()-all.min)/all.diff,
- (it->getUppersAll()-uppers_all.min)/uppers_all.diff,
- (it->getMarksAll()-marks_all.min)/marks_all.diff,
- (it->getTabsAll()-tabs_all.min)/tabs_all.diff,
- (it->getNumsAll()-nums_all.min)/nums_all.diff,
- it->getType()));
- return normalize_strings;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement