2016-09-29 44 views
-3

下面的代碼對一些數據文件的工作,但對於其他一些數據文件,它沒有工作,屏幕顯示如下:C++ inplace_merge表達:序列沒有下令

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(); 
    } 
+2

序列沒有排序 –

+0

歡迎來到Stack Overflow!你的文字圖像[不是很有用](// meta.unix.stackexchange.com/q/4086)。它不能被複制到編輯器中,而且它的索引也不是很好,這意味着具有相同問題的其他用戶不太可能在此找到答案。請[編輯]您的文章直接合並相關文本(最好使用複製+粘貼以避免轉錄錯誤)。 –

回答

0

std::inplace_merge的先決條件之一是數據已經按照順序排列。

兩個範圍內的元素都應該按照相同的標準(運營商<或comp)進行排序。結果範圍也根據這個排序。

在合併之前,您需要根據相同的operator<對列表進行排序。