[英]More than two column sort in 2d vector c++
我已經為二維向量上的排序編寫了代碼,這取決於兩列。 例如,如果這是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])
在我的第二個程序中。
以下是一些偽代碼,可能會對您有所幫助:
bool compare(lhs, rhs) {
//compare lhs and rhs, which you know is different at this point
}
bool operator()(lhs, rhs) {
for i := 0 to noCol
if lhs[i] != rhs[i]
return compare(lhs, rhs)
//We know now that lhs and rhs are equal
return true;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.