基于String对结构数组进行排序

时间:2013-12-11 04:58:21

标签: c++ sorting struct

我一直在阅读与排序结构阵列相关的所有主题,但尚未有任何运气,所以我只是问。我有一个结构:

  struct question{
    string programNum;
    string programDesc;
    string programPoints;
    string programInput;
    string programQuestion;
  };

我在main中填充了一个question数组,现在有一个名为questions[]的数组,所以现在我需要编写一个基于{{1}排序questions[]的排序}。根据我所读到的内容,这就是我所处的位置,但我不确定它是否接近:

question.programQuestion

如果这是对的,我不确定如何在main中调用它。谢谢你的帮助!

2 个答案:

答案 0 :(得分:1)

如果您打算使用std::sort对此数组进行排序,则可能需要在此operator<中声明struct作为方法。像这样:

  struct question{
    string programNum;
    string programDesc;
    string programPoints;
    string programInput;
    string programQuestion;

    bool operator<( const question &rhs) const;
  };

  bool question::operator<( const question &rhs ) const
  {
      return programQuestion < rhs.programQuestion;
  }

您尝试在上面声明的比较函数似乎是qsort期望的类型,我会建议尝试qsort这些struct question的数组}}秒。

只需使用std::sort即可。它更安全,几乎总是更快(有时候是巨大的利润),而且通常更容易做对。

答案 1 :(得分:0)

除非有一些重要原因不这样做,否则我会使用std::vector而不是普通数组。它更容易,更安全。您可以使用以下代码对矢量进行排序:

std::vector<question> questions;

// add some elements to the vector

std::sort(begin(questions), end(questions),
    [](const question& q1, const question& q2) {
        return q1.programQuestion < q2.programQuestion;
    });

此代码使用一些C ++ 11功能。但是你可以通过使用function object在C ++的早期版本中实现相同的功能,或者只是在结构中实现operator<(假设你总是希望根据该字段对这样的结构进行排序)。