2014-09-23 39 views
1

因此,程序會獲取用戶名和ID,並將它們存儲在向量vName和vID中。例如,我有這樣的代碼,需要一個字符串名稱如何根據另一個預先排序的字符串向量來命令包含字符串的向量?

cout << "what is your name?"; 
getline(cin sName) 
vName.push_back(sName) 

cout << "what is your name?"; 
getline(cin sName) 
vName.push_back(sName) 

如果用戶輸入的名稱保羅和勒託的ID 123和456,如果我清點向量內的元素,我會找回來正是因爲我把他們。但如果我決定這樣

(vName.begin(), vName.end()); 

排序VNAME和我清點勒託將與123相匹配和保羅將與456如何防止這種情況的發生相匹配的元素?我如何做到這一點,無論vName如何排序,vID都會改變,以便這些ID與名稱匹配?首先排序您的ID載體使用的名稱爲代理訂貨

struct Person { 
    string name; 
    int id; 
}; 
vector<Person> people; 

如果你不喜歡,你可以做「代理排序」:

+3

存儲包含名稱和ID的對象? – juanchopanza 2014-09-23 06:35:40

+0

我不明白你問我一個問題嗎? – ZeeZeeZee 2014-09-23 06:42:00

+1

你甚至不需要發明一個結構。如果你選擇了簡單的路線,就爲你提供了一個:'std :: vector >'。但請注意,無論您如何追求此目標,如果這與[**此問題**]相關(http://stackoverflow.com/questions/25957725/i-am-trying-to-use-a-do- while-loop-to-repeat-a-certain-of-my-program-and)它對'binary_search'等東西提出了一個有趣的挑戰,即如果你正在搜索的是「名稱」會員。一個'std :: map'可能更適合。 – WhozCraig 2014-09-23 06:44:03

回答

2

你應該使用結構。在這兩種解決方案中,您都需要實現自己的謂詞,以按名稱字段進行排序。

+0

+1用於指出僅在名稱(或id-only,或name-id或id-name)上進行排序的必要謂詞。 – WhozCraig 2014-09-23 06:47:40

+0

好吧,我想我理解結構如何工作,這可能是一個更好的方法。謝謝 – ZeeZeeZee 2014-09-23 07:14:25

+1

爲了以防萬一,這裏是解釋[代理排序]的鏈接(http://stackoverflow.com/questions/3398819/sort-by-proxy-or-sort-one-container-by-the-contents-另一個在c)。創建第三個索引向量,從0到n-1,根據vName對索引向量進行排序,然後根據現在排序的索引向量複製或重新排列vName和vId。 – rcgldr 2014-09-23 07:16:02

相關問題