C ++按日期排序链表

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C ++按日期排序链表相关的知识,希望对你有一定的参考价值。

我想按日期排序我的链表:

void sortuj(List *head)
{
    List curr = *head;
    List next;
    int temp;

    while (curr && curr->next)
    {

    next = curr->next;
        while (next)
        {
            if (curr->year > next->year)
            {
                std::swap(next->day, curr->day);
                std::swap(next->month, curr->month);
                std::swap(next->year, curr->year);
                std::swap(next->hour, curr->hour);
                std::swap(next->minute, curr->minute);
                std::swap(next->length, curr->length);
                std::swap(next->group, curr->group);
                std::swap(next->description, curr->description);
            }
            next = next->next;
        }
        curr = curr->next;
    }
}

它现在正在运行,但仅仅一年,我还有一些参数可供选择。我想从最旧到最新排序,我从文件中读取所有数据。我该怎么做?

答案

如果你正在使用C ++ 11(或更高版本),一个简单的方法是使用std::tie<tuple>

在代码中使用示例(只是在这里猜测):

if (std::tie(curr->year, curr->month, curr->day)
  > std::tie(next->year, next->month, next->day)) {
...
}
另一答案

在您的函数中,您只需比较年份,如果有相同年份的数据,则您的函数无法对它们进行排序。

你可以将D-M-Y时间转换为time_t,例如:

#include <time.h>
...
time_t convertTime(List& l)
{
    /*struct*/ tm _tm;
    _tm.tm_year = l.year;
    _tm.tm_mon = l.month;
    _tm.tm_mday = l.day;
    _tm.tm_hour = l.hour;
    _tm.tm_min = l.minute;
    _tm.tm_sec = l.second;
    _tm.tm_isdst = 0;
    return mktime(&_tm);
}

time_t指1970年参数的秒数。

以上是关于C ++按日期排序链表的主要内容,如果未能解决你的问题,请参考以下文章

C实现的可排序的双向链表

精选力扣500题 第66题 LeetCode 83. 删除排序链表中的重复元素c++/java详细题解

C项目 文件,结构体,链表,排序, 学生信息管理系统

关于C语言链表的问题,一个排序的问题,按num排序,求大佬帮助,在线等~!有点急~!

双向链表排序c语言程序设计

双向链表排序c语言程序设计