gpt4 book ai didi

c++ - std::multiset 并找到中间元素

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:16:18 26 4
gpt4 key购买 nike

我有 std::multiset 如果我从 std::multiset::begin() 迭代到 std::multiset::end( ) 我将得到排序的元素。除了从 std::multiset::begin() 迭代到 std::multiset::之外,如何获取此 std::multiset 中的中间元素开始() + 大小()/2

最佳答案

这是获取 std::multiset 的中值的解决方案:

template<class T>
double GetMedian(const std::multiset<T>& data)
{
if (data.empty())
throw std::length_error("Cannot calculate median value for empty dataset");

const size_t n = data.size();
double median = 0;

auto iter = data.cbegin();
std::advance(iter, n / 2);

// Middle or average of two middle values
if (n % 2 == 0)
{
const auto iter2 = iter--;
median = double(*iter + *iter2) / 2; // data[n/2 - 1] AND data[n/2]
}
else
{
median = *iter;
}

return median;
}

如果您需要中值绝对偏差 (mdev),例如:

template<class T>
double GetMedianAbsoluteDeviation(const std::multiset<T>& data)
{
const double fMedian = GetMedian(data);
std::multiset<double> diff;
for (const auto& x : data)
{
diff.insert(std::abs(fMedian - x));
}
return GetMedian(diff);
}

关于c++ - std::multiset 并找到中间元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12140635/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com