c ++ inplace_merge表达式:序列未排序

时间:2016-09-29 15:00:31

标签: c++

以下代码适用于某些数据文件,但对于其他一些数据文件,它不起作用,显示以下屏幕:

enter image description here

任何人都可以帮忙解决这个问题吗?

if (file.open(QIODevice::ReadOnly))
    {
        int s = parsed_contents.size();
        parsed_contents += QString(file.readAll()).split("\n").filter(datestr);
        std::inplace_merge (parsed_contents.begin(), parsed_contents.begin() + s, parsed_contents.end(), [&](const QString &a, const QString &b) -> bool
        {
           QDateTime dt_a = (dt.indexIn(a) != -1)?QDateTime().fromString(dt.cap(2) + "-" + year + " " + dt.cap(3), "MM-dd-yyyy hh:mm:ss:zzz"):QDateTime();
           QDateTime dt_b = (dt.indexIn(b) != -1)?QDateTime().fromString(dt.cap(2) + "-" + year + " " + dt.cap(3), "MM-dd-yyyy hh:mm:ss:zzz"):QDateTime();

           return dt_a < dt_b;
        });
        file.close();
    }

1 个答案:

答案 0 :(得分:0)

std::inplace_merge的先决条件之一是数据已经按顺序排序。

  

两个范围内的元素必须按照相同的标准(运算符&lt;或comp)进行排序。结果范围也按此分类。

您需要在合并之前根据相同的operator<对列表进行排序。