前面已经讨论过如何计算数字数组的中位数。比如可以引用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/