2017-04-18 55 views
1

我正在學習編寫代碼並找到有趣的任務,但我不知道從哪裏開始解決它。所以我有一個標題和評論文件需要放在正確的標題下。所以輸入的第一行包含一個數字N,它決定了標題的數量。每行以唯一的文章ID(整數)開頭,後面跟着引號中的標題。沒有更多的標題後,給出評論。開始時有標題ID和評論(一個詞),但是對於相同的ID可能會重複評論。所以這裏是一個文件的結構:C++從文件中讀取並輸出排序的內容

<N>     
<ID1> "<Title1>" 
...     
<IDN> "<TitleN>" 
<ID1> <Comment1> 
...     
<IDK> <CommentK> 

現在在輸出文件中,每個標題都有兩行 - 第一個是標題,第二個是註釋。標題必須按升序排列。和評論應該是相反的順序(在開始最新評論)的輸出文件的結構:

<Title1> 
<Comment11> ... < CommentK1> 
... 
<TitleN> 
<Comment1N> ... < CommentLN> 

例子:

input: 

3 
1 "This is some title" 
3 "Another title" 
2 "And one more" 
1 COmment 
1 Another 
3 Great 
2 Awesome 
3 Lucky 
2 Stanley 

output 

This is some title 
Another COmment 
And one more 
Stanley Awesome 
Another Title 
Lucky Great 

我現在不從哪裏開始。我應該使用數組將數據保存在內存中,然後嘗試以正確的模式對其進行排序?或者將文本文件加載到數據結構中更好一些;在這種情況下是一個鏈表?也許有人可以指導我在正確的方向如何完成這項任務。 (我不要求爲我編碼,只是引導我或給一些算法,這將不勝感激)。謝謝!

回答

1

我假設你知道如何用C++讀取文件,如果沒有,請看看它,例如在這個tutorial

對於排序部分,您可以使用STL container 來存儲ID。我會推薦一個帶有id作爲鍵和字符串作爲值的地圖。

地圖的優點是,它已經排序(升序)。

如果你使用另一個容器,你應該看看排序算法,如果你想了解它們是如何工作的。例如氣泡排序,選擇排序,快速排序或合併排序的主要。

但是,如果你想排序沒有任何實現,看看this

這並不能爲您的問題提供具體的答案,但它可以幫助您開始。

[更新] 我沒有正確閱讀,我還沒有看到多行可能有相同的ID。地圖不一定是最合適的容器。

+2

也許['std :: multimap'](http://en.cppreference.com/w/cpp/container/multimap)會有用。它允許每個鍵有多個值;使用等效鍵的值將以插入順序存儲。 –