...one of the most highly
regarded and expertly designed C++ library projects in the
world.
— Herb Sutter and Andrei
Alexandrescu, C++
Coding Standards
boost::accumulators::impl::with_p_square_cumulative_distribution_weighted_median_impl — Median estimation for weighted samples based on the cumulative distribution estimator.
// In header: <boost/accumulators/statistics/weighted_median.hpp> template<typename Sample, typename Weight> struct with_p_square_cumulative_distribution_weighted_median_impl { // types typedef numeric::functional::multiplies< Sample, Weight >::result_type weighted_sample; typedef numeric::functional::average< weighted_sample, std::size_t >::result_type float_type; typedef std::vector< std::pair< float_type, float_type > > histogram_type; typedef iterator_range< typename histogram_type::iterator > range_type; typedef float_type result_type; // construct/copy/destruct with_p_square_cumulative_distribution_weighted_median_impl(dont_care); // public member functions void operator()(dont_care) ; template<typename Args> result_type result(Args const &) const; };
The algorithm determines the first (leftmost) bin with a height exceeding 0.5. It returns the approximate horizontal position of where the cumulative distribution equals 0.5, based on a linear interpolation inside the bin.