c++ - 如何使用STL获取中位数的索引?

标签 c++ stl

前面已经讨论过如何计算数字数组的中位数。比如可以引用What is the right approach when using STL container for median calculation? .现在我有一个不同的问题,那就是如何在原始 STL 容器中获取中位数的索引。为了说明我的问题,我举个例子:

vector<int> myarray;
myarray.push_back(3);
myarray.push_back(1);
myarray.push_back(100);
myarray.push_back( 20);
myarray.push_back(200);
int n = myarray.size()/2;
nth_element(myarray.begin(), myarray.begin()+n, myarray.end());
int median = myarray[n];

在上面的代码中,我可以获得中值,但我无法获得它在原始 vector 数组 (4) 中的索引。有任何想法吗?谢谢!

最佳答案

我认为没有直接的方法可以做到这一点。

您排序的 vector 已更改其顺序,因此在其中搜索将始终返回 n

您需要保存原始 vector 的拷贝,然后在其中进行搜索。请记住,如果原始 vector 包含重复项,您将不知道它们中的哪一个实际上被放到了位置 n(如果这与您有任何相关性)。

作为替代方案,您可以查看 nth_element 的实现,并实现您自己的版本,该版本还报告找到的第 n 个元素的原始位置。

关于c++ - 如何使用STL获取中位数的索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11556151/

相关文章:

c++ - 类设计: arrays vs multiple variables

c++ - 这种模板部分特化的目的是什么?

c++ - Google C++ 风格指南的无异常(exception)规则; STL?

c++ - 用于搜索和排序的最佳容器

c++ - 无法将从函数返回的 vector 传递给需要引用方法的函数

c++ - 关于STL内部结构的问题

c++ - 为什么我的程序在读取/写入文件时丢掉最重要的数字?

c++ - std::vector 的 push_back() 导致奇怪的编译时错误消息

c++ - 如何获取对话框上列表控件的多行工具提示?

c++ - 如何使用右移避免运算符除法