/** \file sorted_data_set.hpp \author Junhua Gu */ #ifndef SORTED_DATA_SET #define SORTED_DATA_SET #define OPT_HEADER #include "core/fitter.hpp" #include #include namespace opt_utilities { template bool comp_data(const data& d1,const data& d2) { return d1.get_x() class sorted_data_set :public data_set { private: std::vector > data_vec; data_set* do_clone()const { return new sorted_data_set(*this); } const data& do_get_data(size_t i)const { return data_vec.at(i); } size_t do_size()const { return data_vec.size(); } void do_add_data(const data& d) { typename std::vector >::iterator p =std::lower_bound(data_vec.begin(),data_vec.end(),d,comp_data); //data_vec.push_back(d); data_vec.insert(p,d); } void do_clear() { data_vec.clear(); } public: sorted_data_set() {} sorted_data_set(const sorted_data_set& rhs) :data_vec(rhs.data_vec) {} sorted_data_set& operator=(const sorted_data_set& rhs) { data_vec=rhs.data_vec; return *this; } sorted_data_set(const data_set& rhs) { for(int i=0;i >::iterator p =std::lower_bound(data_vec.begin(),data_vec.end(),rhs.get_data(i),comp_data); //data_vec.push_back(d); data_vec.insert(p,rhs.get_data(i)); } } sorted_data_set& operator=(const data_set& rhs) { data_vec.clear(); for(int i=0;i >::iterator p =std::lower_bound(data_vec.begin(),data_vec.end(),rhs.get_data(i),comp_data); //data_vec.push_back(d); data_vec.insert(p,rhs.get_data(i)); } return *this; } }; } #endif //EOF