2010-09-24 73 views
2

我通过他们的年龄要那么样的名字排序名称

#include <iostream> 
#include <string> 
#include <vector> 
#include <algorithm> 

using namespace std; 

struct Person{ 
std::string name; 
int age; 
}; 

struct by_age{ 
    bool operator() (Person const &a,Person const &b){ 
    return a.age>b.age;  
    } 
}; 

int main(){ 
vector<Person>people; 
    for (int i=0;i<4;i++){ 
    cin>>people[i].age>>people[i].name; 
    } 

    sort(people.begin(),people.end(),by_age()); 
    for (int i=0;i<4;i++){ 
    cout<<people[i].name<<people[i].age<<" "; 
    }  
return 0; 
} 

但是这个代码有很多错误,请帮忙 看看这个网站

C++ STL: Custom sorting one vector based on contents of another

+6

这个程序有什么错误?预期的产出是多少,产量是多少?您是否尝试过附加调试器来查看代码出错的位置? “这是我的代码,请修复它”在Stack OVerflow中不是一个合适的问题;试着按照“我试图做X,但是当我用输入Y运行它时,我意外地得到了结果Z;我认为它可能与W有关。 – 2010-09-24 15:32:38

回答

3

您需要初始化向量来告诉它应该包含多少个元素。

vector<Person> people(4); 

除此之外,请描述“虫子”,以便人们可以帮助你。

+0

不,我想要这个名字和他们的年龄的数组,并使用他们的年龄排序名称 – user457463 2010-09-24 15:37:18

+1

据我所知,这是你缺乏大量的背景知识的东西。这在这里不能很容易解释。 如果您正在使用教程或书籍,请尝试回顾几章并研究基础知识。 – 2010-09-24 15:42:10

0

把年龄放在一张multimap中,他们会被分类。

5

这段代码的主要问题是矢量是空的,所以当你设置这些值时就会破坏内存。您可能需要显式地设置矢量大小,或者使用push_back()将值添加到它:

vector<Person> people(4); 
+0

您也可以使用'people.push_back(Person(name,age));'循环内部。 – 2010-09-24 16:40:55

0

,而不是试图使用已为你做一个排序,寻找到一个冒泡排序。这是低效的,但是这是每个人都学习的第一种。

需要注意的是,当你使用'namespace std'时,你不需要任何代码前的'std'。

0

您还使用C++ STL对。然后分类这对。