2 つの列に依存する 2D ベクトルの並べ替えのコードを作成しました。例えば、これが2D列のデータなら
バナナ バイク 2 | アップルカー1 | オレンジサイクル5 | バナナカー2 | アップルバイク 3
次に、私の並べ替えはこのデータを次のように変更します。
アップルバイク 3 | アップルカー1 | バナナ バイク 2 | バナナカー2 | オレンジサイクル5
私は私のコーディングの下に与えました。
class StringListCompare
{
public:
explicit StringListCompare(int column, int column2) : m_column(column), m_column2(column2) {}
bool operator()(const vector<string>& lhs, const vector<string>& rhs)
{
if (lhs[m_column] == rhs[m_column])
{
return lhs[m_column2] < rhs[m_column2];
}
else
{
return lhs[m_column] > rhs[m_column];
}
}
private:
int m_column;
int m_column2;
};
ここで、この 2 列レベルの並べ替えを無制限の列レベルの並べ替えに拡張したいと考えています。そこで、このコードを以下のように変更しました。しかし、私はここで何のロジックを見逃していますか。
class CompareSort
{
public:
explicit CompareSort(std::vector<int> fcol,string fsortTyp,string fcaseflg): colNums(fcol) , sortTyp(fsortTyp), caseflg(fcaseflg) {}
bool operator()(const vector<string>& lhs, const vector<string>& rhs)
{
int ret;
size_t noCol=colNums.size();
for(size_t i=0;i<noCol;i++)
{
string lhStr=lhs[colNums[i]];
string rhStr=rhs[colNums[i]];
if(caseflg=="n")
{
lowercase(lhStr);
lowercase(rhStr);
}
if(sortTyp=="asc")
ret= lhStr < rhStr;
else
ret= lhStr > rhStr;
}
return ret;
}
private:
std::vector<int> colNums;
string sortTyp,caseflg;
};
この行を確認するにはどうすればよいですか
if (lhs[m_column] == rhs[m_column])
私の2番目のプログラムで。