我一直在阅读与排序结构阵列相关的所有主题,但尚未有任何运气,所以我只是问。我有一个结构:
struct question{
string programNum;
string programDesc;
string programPoints;
string programInput;
string programQuestion;
};
我在main中填充了一个question
数组,现在有一个名为questions[]
的数组,所以现在我需要编写一个基于{{1}排序questions[]
的排序}。根据我所读到的内容,这就是我所处的位置,但我不确定它是否接近:
question.programQuestion
如果这是对的,我不确定如何在main中调用它。谢谢你的帮助!
答案 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<
(假设你总是希望根据该字段对这样的结构进行排序)。