我定义了类
class student
{
int score1;
int score2;
...
public:
int sum;
...
}有定义了
class studentbox
{
vect<student> stu;public:
...
}
然后我向向量容器里加入student对象  怎样通过sum 对容器的对象排序
比如说用sort函数

解决方案 »

  1.   

    循环判断排序vecor好像不支持排序
    要不就使用map容器,它可以根据关键字排序
      

  2.   

    你可以重载一个大小比较的符号,如:operator >()然后直接用STL的算法比较就行了。 MFC我不太懂,但是STL还是知道一点的。 
      

  3.   

    // Student.cpp : Defines the entry point for the console application.
    //#include <iostream>
    #include<vector>
    #include<algorithm>
    #include<string>
    #include<iomanip>
    #include <functional>
    using namespace std;class Student
    {
    int num;
    string name;
    string sex;
    int score1;
    int score2;
    int score3;
    int aver;
    public:
    int sum;
    Student(int Nnum,string Nname,string Nsex,int score1,int score2,int score3);
    void setNum(int Nnum){num=Nnum;}
    int getNum(){return num;}
    void setName(string Nname){name=Nname;}
    string getName(){return name;}
        void setSex(string Nsex){sex=Nsex;}
    string getSex(){return sex;}    void setScore1(int Nscore1){score1=Nscore1;}
    int getScore1(){return score1;}
        void setScore2(int Nscore2){score2=Nscore2;}
    int getScore2(){return score2;}
        void setScore3(int Nscore3){score3=Nscore3;}
    int getScore3(){return score3;} int getAver(){return (score1+score2+score3)/3;}
    int getSum(){return score1+score2+score3;}
    void disp();
    };class studentBox
    {
    vector<Student> stu;
    public:
    void addStudent();
    void displayAll();
    void menu();
    };
    bool less_sum(const Student &m1,const Student &m2)
    {
    return m1.sum>m1.sum;
    }
    void Student::disp()
    {
    cout<<setw(6)<<getNum()  <<setw(8)<<getName()  <<setw(6)<<getSex()  
    <<setw(6)<<getScore1()  <<setw(6)<<getScore2() 
    <<setw(6)<<getScore3()  <<setw(6)<<getSum()<<setw(6)<<getAver()<<endl;
    }Student::Student(int Nnum,string Nname,string Nsex,int Nscore1,int Nscore2,int Nscore3)
    {
    setNum(Nnum);
    setName(Nname);
    setSex(Nsex);
    setScore1(Nscore1);
    setScore2(Nscore2);
    setScore3(Nscore3);
    }
    void studentBox::addStudent()
    {
    vector<Student>::iterator iter; char ch;
    int Nnum,Nscore1,Nscore2,Nscore3;
    string Nname,Nsex;
    int flag(1);
    do{
    if(stu.size()==0)
    {
    cout<<"请输入新学号: ";
    cin>>Nnum;
    }
    else
    {
    do{ 
    flag=1;
    cout<<"请输入学号: ";
        cin>>Nnum;
    for(iter=stu.begin();iter!=stu.end();iter++)
    if(iter->getNum()==Nnum)
    {
    cout<<"该学号已存在..."<<endl;
    flag=0;
    }
    }while(flag==0);
    }
    cout<<"请输入姓名: ";
    cin>>Nname;
    cout<<"请输入性别: ";
    cin>>Nsex;
    cout<<"请输入数学成绩: ";
    cin>>Nscore1;
    cout<<"请输入语文成绩: ";
    cin>>Nscore2;
    cout<<"请输入英语成绩: ";
    cin>>Nscore3;
    Student s(Nnum,Nname,Nsex,Nscore1,Nscore2,Nscore3);
    stu.push_back(s);
    cout<<"\n 继续输入吗?(Y/N): ";
    cin>>ch;
    }while(ch=='Y'||ch=='y');
    }void studentBox::displayAll()
    {

    vector<Student>::iterator iter;
    if(stu.size()==0)
    cout<<"没有学生资料......"<<endl;
    else
    {
        sort(stu.begin(),stu.end(),less_sum);  cout<<"学号    "<<"姓名    "<<"性别    "<<"数学成绩  "<<"语文成绩  "<<"英语成绩  "<<"总分    "<<"平均分 "<<endl;
    for(iter=stu.begin();iter!=stu.end();iter++)
    iter->disp();
    }
    }void studentBox::menu()
    {
    char ch;
    do{
    cout<<"选择1:学生数据的输入!"<<endl;
    cout<<"选择2:排序并显示!"<<endl;
    cout<<"选择0:退出!"<<endl;
    cout<<"请选择你要进行的操作!"<<endl;
    cin>>ch;
    switch(ch)
    {
    case'1':addStudent();break;
    case'2':displayAll();break;
    case'0':cout<<"\t\t\tGoodbye!"<<endl;break;
    default:cout<<"输入错误,重新输入:";break;
    }
    }while(ch!='0');}
    int main()
    {   
    studentBox box;
    box.menu(); 
    return 0;

    排不了序
    应该怎样修改?
      

  4.   

    Get类的函数都加上const修饰
    int getSum()const{return score1+score2+score3;}
    ------------
    这里明显的错误
    bool less_sum(const Student &m1,const Student &m2) 

    return m1.getSum() > m2.getSum(); 

      

  5.   

    map想存自定义类型的话,要重载<号。
    http://www.cnblogs.com/kevintian/articles/1277700.html下面这篇是关于直接用sort的。http://www.cnblogs.com/kevintian/articles/1277700.html看你想用哪个吧
      

  6.   


    你在执行排序sort(stu.begin(),stu.end(),less_sum)的时候,使用的是以sum这个成员的大小来排序的。可是排序的时候sum这个成员的值还没有生成,所以无法排序成功,需要在插入用户信息的时候,就生成sum值。
    例如:
    Student::Student(int Nnum,string Nname,string Nsex,int Nscore1,int Nscore2,int Nscore3) 

    setNum(Nnum); 
    setName(Nname); 
    setSex(Nsex); 
    setScore1(Nscore1); 
    setScore2(Nscore2); 
    setScore3(Nscore3); 
    sum = getSum();
    } 重载<小于号操作符:
    例如:
    class Student 

    public: 
    int sum; 
    bool operator <(Student temp)
    {
        return this->sum < temp.sum;
    }
    ……
    }
    排序的时候使用sort:例如:
            std::sort(stu.begin(), stu.end()); 就可以排序成功了,如下:学号    姓名    性别    数学成绩  语文成绩  英语成绩  总分    平均分
         1       1     1     1     1     1     3     1
         2       2     2    33    33    33    99    33输入学生3后:学号    姓名    性别    数学成绩  语文成绩  英语成绩  总分    平均分
         1       1     1     1     1     1     3     1
         3       3     3    22    22    22    66    22
         2       2     2    33    33    33    99    33