#ifndef MEDIAN_H #define MEDIAN_H #include #include template class Median { private: /** all scalar values in a sorted order (ascending) */ std::vector sorted; public: /** add the given scalar value to the median calculation */ void add(const Scalar value) { const auto idx = std::upper_bound( sorted.begin(), sorted.end(), value ); sorted.insert( idx, value ); } /** get the median of all added values */ float get() const { if (sorted.size() % 2 == 1) { // odd const int idx = sorted.size()/2; return sorted[idx]; } else { // even const int idx0 = sorted.size()/2 - 1; return (sorted[idx0] + sorted[idx0+1]) / 2; } } }; #endif // MEDIAN_H