私は関数takeをベクトル化してランク付けしてソートし、ソートしランク付けしたベクトルを元の値。例:入力:[10,332,42,0.9,0]出力:[3,5,4,2,1]C++でベクトルをソートしてランク付けする方法(C++ 11を使用せずに)
このスタックオーバーフローquestion(特にMariusの回答)をリファレンスガイドとして使用しましたが、私のコードに悩まされていて、どこに問題があるのか分からない。 私はC++ 03を実行しています。
私が取得エラーの一つは、私のif
文で
error: invalid types ‘const float*[float]’ for array subscript’ for array subscript
です。
//Rank the values in a vector
std::vector<float> rankSort(const float *v_temp, size_t size)
{
vector <float> v_sort;
//create a new array with increasing values from 0 to n-1
for(unsigned i = 0; i < size; i++)
{
v_sort.push_back(i);
}
bool swapped = false;
do
{
for(unsigned i = 0; i < size; i++)
{
if(v_temp[v_sort[i]] > v_temp[v_sort[i+1]]) //error line
{
float temp = v_sort[i];
v_sort[i] = v_sort[i+1];
v_sort[i+1] = temp;
swapped = true;
}
}
}
while(swapped);
return v_sort;
}
std::vector<float> rankSort(const std::vector<float> &v_temp)
{
return rankSort(&v_temp[0], v_temp.size());
}
* line *でエラーが発生しますか?例:コメント。 –
また、なぜソート関数へのポインタを渡していますか?なぜベクトルを取る関数でそれをソートしないのですか? –
@Someprogrammerdude done – Newskooler