1

ベクトルに格納されている要素の中央値を計算したい

#include <vector>
#include <string>
#include <algorithm>
#include <iostream>
using namespace std;

 ....
 ....
 ....

vector<int> trmVa;
int size;
int median;
int trimVal;

trmVa.push_back(trimVal);
size = trmVa.size();
sort(trmVa.begin(), trmVa.end()); //I am having troubles here!!!!

if(size % 2) {
  median = (trmVa[size/2 - 1] + trmVa[size/2]) /2;
  printf("Module %d \n\n \t Median = %d\n", mod, median); 
}else {
   median = trimVa[size/2];
   printf("Module %d \n\n \t Median = %d\n", mod, median);
}

エラー: operator- vector に対して定義されていません >::iterator algo.h:722。助けてくれてありがとう。

4

1 に答える 1

3

std::nth_elementを使用すると、この問題をより効率的に解決できます。これはベクトルの部分的なソートのみを行い、線形の複雑さを持ちます。以下は奇数サイズのベクトルの例です。

size_t midIndex = trmVa.size()/2;
nth_element(trmVa.begin(), tmrVa.begin() + midIndex, trmVa.end());

中央値は

trmVa[midIndex];

これを簡単に拡張して、偶数サイズのベクトルをカバーできます。

于 2012-09-02T16:19:00.053 に答える