首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >std::multiset和查找中间元素

std::multiset和查找中间元素
EN

Stack Overflow用户
提问于 2012-08-27 18:54:26
回答 1查看 6.4K关注 0票数 6

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-05 23:37:51

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

代码语言:javascript
复制
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),例如:

代码语言:javascript
复制
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);
}
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12140635

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档