c++ - 二维 vector C++ 中的多于两列排序

标签 c++ sorting std multiple-columns 2d-vector

我已经编写了基于两列的二维 vector 排序代码。例如,如果这是二维列的数据

banana bike 2 | apple car 1 | orange cycle 5 | banana car 2 | apple bike 3

然后我的排序会将这些数据更改为,

apple bike 3 | apple car 1 | banana bike 2 | banana car 2 | orange cycle 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;
}

关于c++ - 二维 vector C++ 中的多于两列排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21284459/

相关文章:

c++ - 作为本地系统运行进程

linux - 排序选项前面的数字表示法指的是什么?

python - 如何列出某些目录内容的最新修改时间?

c++ - 用作堆栈的 std::vector 和 std::stack 之间是否存在任何复杂性差异?

c++ - 二进制搜索标准 :map

c++ - cuBlas 的不同结果

c++ - 在 Visual Studio 10 中使用类型转换运算符重载时出现 C2440 错误

python - Omnet++简单模块C++代码中python嵌入式代码中的Segmentation fault错误

c# - 在 C# 中,如何通过单独的 int 数组对对象集合进行排序?

c++ - Qt -"\n"不起作用,但 std::endl 可以吗?