【问题标题】:Sorting a standard array of structs on a variable [duplicate]对变量的标准结构数组进行排序[重复]
【发布时间】:2012-10-27 05:15:34
【问题描述】:

可能重复:
c++ sort with structs

我试图弄清楚如何对数组中保存的结构中特定变量的结构数组进行排序。这是我的代码:

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 会是更好的选择,但我决心使用数组来解决这个问题。

任何有关排序的帮助将不胜感激! :)

【问题讨论】:

  • 你尝试了什么?有没有尝试在网络上找到解决方案?有很多关于排序算法的教程和基础知识。
  • @DenisErmolin 嘿!我尝试了各种各样的事情。我似乎被我发现的一个名为 qsort() 的函数所吸引,但我似乎无法让它与我正在做的事情一起工作。
  • 他们显示什么是不工作的。这是问答网站。
  • 之前有人问过这个问题:stackoverflow.com/questions/873715/c-sort-with-structs(接受的答案假定为std::vector,但问题假定为数组,一些答案正确地解决了这个问题。)
  • @jogojapan - 谢谢!我实际上确实看到了那个确切的帖子,所以感谢您深入挖掘。我本来打算使用 qsort 来获得更多的标准数组,但正如 Juraj Blaho 在下面向我展示的那样,我仍然可以将 STL 排序算法与标准数组一起使用。你们都非常乐于助人。 :)

标签: c++ arrays sorting struct


【解决方案1】:

您仍然可以通过添加比较函数将数组与 STL 排序算法一起使用:

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

sort(arrayOfProcesses, arrayOfProcesses + numProcesses);

【讨论】:

    【解决方案2】:

    使用标准&lt;algorithm&gt; 标头中的sort

    std::sort(arrayOfProcesses, arrayOfProcesses+numProcesses, [](Process const &a, Process const &b){ return a.arrival < b.arrival; });
    

    【讨论】:

    • 谢谢!我最终这样做了:sort(arrayOfProcesses, arrayOfProcesses+numProcesses, sortOnArrival); 我编写了自己的排序函数。
    猜你喜欢
    • 1970-01-01
    • 2011-06-21
    • 1970-01-01
    • 2020-12-15
    • 1970-01-01
    • 2013-09-16
    • 2022-11-15
    • 1970-01-01
    相关资源
    最近更新 更多