2014-09-23 56 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

相关问题