2013-10-29 15 views
0

我正在嘗試創建一個程序有一些問題。我需要在其中有一個人的名字的文本文件,其次是他們的年齡下一行閱讀,但是對於許多people..example:雙重鏈接列表,以單獨排序名稱和年齡C++

Tyler 
24 
Greg 
16 
Laura 
25 
etc... 

然後我需要建立一個用於數據的列表按照姓名和年齡以雙向鏈接列表的升序維護。該列表需要按照順序進行排序(而不是最後)。到目前爲止,我已經完成了建立一個有序的雙向鏈表,並且正在閱讀文件,但是當我打印出文件時,它會按年齡遞增順序給我所有年齡段,然後按字母順序排列所有名字。我需要年齡來堅持它屬於誰。例如與姓名/年齡在它上面正在打印出來:

16 
24 
25 
Greg 
Laura 
Tyler 

當我需要它打印出來:

(by age) 
Greg 16 
Tyler 24 
Laura 25 

(by name) 
Greg 16 
Laura 25 
Tyler 24 

我可以張貼代碼,如果需要的話,但我並不是真的在尋找編碼方面的幫助(至少從現在起),更多的是爲了將它們放在一起。目前我正在閱讀該文件,並將其作爲字符串傳遞給插入函數(我很確定這是我誤解的地方,但不知道如何去做)。

在此先感謝,請隨時欣賞這裏的幫助!

+2

如果是我,我會用'name'和'age'屬性創建一個類。然後用'getName()'或'getAge()'對對象進行排序。 – nhgrif

回答

0

我看到了幾個不同的解決方案,可以在這裏工作。如果你定義一個類,像這樣:

class Person { 
private: 
    int name; 
    int age; 

    ... 
}; 

一些不同的比較函數(isGreaterAge()isAlphabeticalName()),這可能會奏效。
如果這並不是一個鏈表(這是功課?),你可以使用地圖或(更適合你的目的)屈德寧,這是專門用來做這樣的事情:
http://www.cplusplus.com/reference/map/multimap/?kw=multimap

+0

地圖的建議很好。但是,C++ idio總是更喜歡vector,直到有其他需要的東西出於某種原因。 (例如,在您注意到向量是性能瓶頸後,測量的性能比向量好。) – Skalli

0

這主要取決於您設計數據結構的方式以及如何對其執行排序算法。

數據結構:

你需要保持在一個給定的節點的數據無論是信息的名稱/年齡從雙向鏈表指針指針分開。 所以刀片將有兩個參數一個是名,並從表頭指針的另一個年齡分開(如果函數是重入)

排序:

有不同的方式進行排序,我寧願是? 最初雖然列表創建節點以基於名稱的排序方式插入(考慮到名稱排序而不是年齡相關的優先級)

因此,無論何時用戶要求命名排序,我們都可以直接列出所有元素。現在

當用戶要求在年齡方面的排序則需要進行實際的排序,但不改變鏈接剛剛打印出來並作爲訪問或處理你叫什麼,並繼續將它們標記。

希望這可以幫助你。 czar