以下代码适用于某些数据文件,但对于其他一些数据文件,它不起作用,显示以下屏幕:
任何人都可以帮忙解决这个问题吗?
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();
}
答案 0 :(得分:0)
std::inplace_merge
的先决条件之一是数据已经按顺序排序。
两个范围内的元素必须按照相同的标准(运算符&lt;或comp)进行排序。结果范围也按此分类。
您需要在合并之前根据相同的operator<
对列表进行排序。