在一个变量上对标准结构数组进行排序

4

我正在尝试弄清楚如何按照结构体内部特定的变量对数组中的结构体进行排序。下面是我的代码:

可能是重复问题:
c++按结构体排序

struct Process{
    int pid;
    int burst;
    int arrival;
};

int main(int argc, char *argv[]){

    // The number of processes
    int numProcesses = 3;

    //Create an array that holds 10 Process structs
    Process *arrayOfProcesses = new Process[numProcesses];

    // Puts values in each pid, burst, and arrival
    arrayOfProcesses[0].pid = 0;
    arrayOfProcesses[0].burst = 8;
    arrayOfProcesses[0].arrival = 2;

    arrayOfProcesses[1].pid = 1;
    arrayOfProcesses[1].burst = 12;
    arrayOfProcesses[1].arrival = 3;

    arrayOfProcesses[2].pid = 2;
    arrayOfProcesses[2].burst = 4;
    arrayOfProcesses[2].arrival = 1;

    // Sort the array based on the arrival time
    // Help! :)
}

我希望能够对我的代码中的数组按到达时间进行排序。我简化了代码,以便让您大致了解我的目标。在我的实际代码中,该数组是从文件中读取的信息动态填充的。我知道使用List或Vector会是更好的选择,但我决定使用数组来解决这个问题。如果有任何关于排序的帮助将不胜感激! :)

你试了什么?曾经尝试在网络上找解决方案吗?有很多关于排序算法的教程和基础知识。 - Denis Ermolin
@DenisErmolin 嘿!我尝试了各种方法。我似乎被一个叫做qsort()的函数所吸引,但是我似乎无法将它与我正在做的事情结合起来。 - Rick_Sch
它们展示了什么不起作用。这是一个问答网站。 - Denis Ermolin
1
这个问题之前已经被问过了:https://dev59.com/dnNA5IYBdhLWcg3wrPyq (被采纳的答案假设使用 std::vector,但问题假设使用一个数组,一些答案已经正确地解决了这个问题)。 - jogojapan
@jogojapan - 谢谢!我实际上看到了那篇帖子,所以感谢您深入挖掘。我想使用更标准的数组来使用qsort,但正如Juraj Blaho在下面向我展示的那样,我仍然可以使用STL sort算法与标准数组。你们都非常有帮助。 :) - Rick_Sch
2个回答

4
使用标准库头文件<algorithm>中的sort函数进行排序:
std::sort(arrayOfProcesses, arrayOfProcesses+numProcesses, [](Process const &a, Process const &b){ return a.arrival < b.arrival; });

谢谢!我最终做了这个: sort(arrayOfProcesses, arrayOfProcesses+numProcesses, sortOnArrival); 我编写了自己的排序函数。 - Rick_Sch

3

您仍然可以通过添加比较函数,使用STL排序算法来使用您的数组:

#include <algorithm>
bool operator<(const Process& lhs, const Process& rhs)
{
  return lhs.pid < rhs.pid;
}

sort(arrayOfProcesses, arrayOfProcesses + numProcesses);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接