0

我有一系列事件,我想根据它们的年份对它们进行排序,然后按月对每年进行排序,然后按天对每个月进行排序,然后按小时对每一天进行排序。

typedef struct {
    struct tm start;
    struct tm end;
} event;
...
event events[100];

我只需要担心按start日期排序。我已经为此苦苦挣扎了好几个小时...

4

1 回答 1

5

与您对多个键进行任何排序的方式相同:一次一个,按照您想要的优先级顺序。

qsort()回调可能如下所示:

static int event_compare(const void *a, const void *b)
{
  const event *ae = a, *be = b;

  if(ae->start.tm_year < be->start.tm_year)
    return -1;
  else if(ae->start.tm_year > be->start.tm_year)
    return 1;
  /* Years are equal, try to solve that by checking month. */
  if(ae->start.tm_month < be->start.tm_month)
    return -1;
  else if(ae->start.tm_month > be->start.tm_month)
    return 1;
  /* Months are equal, go on with day, and so on. */
}
于 2013-10-09T07:01:01.693 回答