c++ - 使用 STL 容器进行中位数计算时,正确的方法是什么?

标签 c++ algorithm stl containers median

假设我需要从 1000000 个随机数值序列中检索中位数。

如果使用任何 std::list,我没有(内置)方法来对中值计算的序列进行排序。

如果使用 std::list,我无法随机访问值来检索排序序列的中间(中位数)。

自己实现排序并使用例如是否更好? std::vector,还是使用std::list和使用std::list::iterator来for-loop-走到中间值?后者似乎不那么开销,但也感觉更难看..

或者我有更多更好的选择吗?

最佳答案

任何随机访问容器(如 std::vector )都可以使用标准 std::sort 进行排序算法,在 <algorithm> 中可用标题。

要找到中位数,使用 std::nth_element 会更快。 ;这足以将一个选定的元素放在正确的位置,但不能完全对容器进行排序。所以你可以找到这样的中位数:

int median(vector<int> &v)
{
    size_t n = v.size() / 2;
    nth_element(v.begin(), v.begin()+n, v.end());
    return v[n];
}

关于c++ - 使用 STL 容器进行中位数计算时,正确的方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1719070/

相关文章:

c++ - 检查给定日期是否在日期范围列表中的最可能使用的方法是什么?

c++ - SSE 到 C++ 代码

c++ - YUV 图像中的像素

algorithm - 重复替换或伸缩以计算函数的运行时间复杂度

algorithm - 使用最小堆查找第 k 个最大元素

STL - 如何在STL加载的BufferGeometry中平滑网格三角形

c++ - 支持 C++11 的开源 STL 实现

c++ - wsprintf() 的安全版本?

algorithm - 从一组整数中找到其总和最接近某个值的子集

c++ - C++ 中的映射导致错误