сортировка — более двух столбцов сортировки в 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;
};

Теперь я хочу расширить эту сортировку на уровне столбцов до неограниченной сортировки на уровне столбцов. Поэтому я изменил этот код, как указано ниже. Но я не знаю, какую логику мне здесь не хватает.

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])

в моей второй программе.

1

Решение

Вот некоторый псевдокод, который может вам немного помочь:

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;
}
2

Другие решения

Других решений пока нет …