MATLAB sort()として機能する関数を実装したいと思います。 以下のように、構造体と関数テンプレートをheadファイルに定義しました。関数の引数としての関数テンプレート
template<typename T_val> struct SORT_DATA
{
T_val value; //
int index;
};
template<typename T_var>
bool ccmp(SORT_DATA<T_var> & var_a, SORT_DATA<T_var> & var_b)
{
return var_a.value < var_b.value;
}
main()では、構造変数を使用して、ccmp()をC++ sort()の引数として渡します。
//SORT_DATA<double> * data1 = new SORT_DATA<double>[15];
SORT_DATA<double> data1[15];
double tmp_data[15] = {25, 23, 1, 32, 0, 43, 98, 8, 7, 11, 34, 52, 32, -53, 6};
for(int i=0; i<15; i++)
{
data1[i].value = tmp_data[i];
data1[i].index = i;
}
//sort(data1, data1+15, ccmp);
for(int i=0; i<15; i++)
std::cout<<setw(5)<<data1[i].value<<" ";
std::cout<<std::endl;
for(int i=0; i<15; i++)
std::cout<<setw(5)<<data1[i].index<<" ";
は、私はいくつかの問題を得た: 1.メモリが構造体変数に割り当てることができなかったようです。 2.機能テンプレートを関数の引数として使用できないというVS2010からのエラーメッセージが表示されました。
#pragma once
#include <iostream>
#include <iomanip>
#include <algorithm>
#include "customizedalg.h" // This is simply the declaration of the struct and bool cmp().
using namespace std;
int main(int argc, char ** argv)
{
SORT_DATA<double> * data1 = new SORT_DATA<double>[15];
//SORT_DATA<double> data1[15];
double tmp_data[15] = {25, 23, 1, 32, 0, 43, 98, 8, 7, 11, 34, 52, 32, -53, 6};
for(int i=0; i<15; i++)
{
data1[i].value = tmp_data[i];
data1[i].index = i;
}
sort(data1, data1+15, ccmp<double>);
for(int i=0; i<15; i++)
std::cout<<setw(5)<<data1[i].value<<" ";
std::cout<<std::endl;
for(int i=0; i<15; i++)
std::cout<<setw(5)<<data1[i].index<<" ";
std::cout<<std::endl;
std::cin.ignore();
return 0;
}
'。私は+ +; i <15) 'forループはどのように見えるのでしょうか –
[mcve]を入力してください。コード内の特定の行に関するエラーメッセージが表示された場合は、その行を明確にマークしてください。 –
@PiotrSkotnicki Piotrありがとうございます。 C++を使わなかったのはずっと前からのことです。それは... MATLABスタイルです。今、それは値を出力することができますが、2番目の値はまだ助けを必要とします。 – user18441