请教一下,如下的代码中,调用了sort 排序,vector中为什么没有按总成绩大小排序:
#ifndef __TEST__H #define __TEST__H #include <iostream> #include <vector> using namespace std; class Student { public: //构造函数 Student(const string &strName, const string &iSchoolNbr , const double iChinese, const double iMath, const double Math, const double English, const double History): \ m_Name(strName), m_SchoolNbr(iSchoolNbr), m_MathScore(iMath), m_ChineseScore(iChinese), m_EngScore(English), m_HistoryScore(History), m_TotalScore(0), \ m_AverageScore(0) { m_TotalScore = m_MathScore + m_ChineseScore + m_EngScore + m_HistoryScore; m_AverageScore = m_TotalScore / mCourseNbr; } Student(): m_Name(""), m_SchoolNbr(""), m_MathScore(0), m_ChineseScore(0), m_EngScore(0), m_HistoryScore(0), m_TotalScore(0), m_AverageScore(0) { } //输入,输出操作符 friend ostream & operator << (ostream &Out, const Student &stu1); friend istream & operator >> (istream &In, Student &stu1); //小于操作符 friend bool comp (const Student &stu1, const Student &stu2); Student & operator = (const Student &stu); private: static int mCourseNbr; string m_Name; string m_SchoolNbr; double m_MathScore; double m_ChineseScore; double m_EngScore; double m_HistoryScore; double m_TotalScore; double m_AverageScore; }; int Student::mCourseNbr = 4; #endif
#include "test.h" ostream & operator << (ostream &Out, const Student &stu1) { Out << "shool number: " << stu1.m_SchoolNbr << endl; Out << "Name: " << stu1.m_Name << endl; Out << "Chinese Score: " << stu1.m_ChineseScore << endl; Out << "Math Score: " << stu1.m_MathScore << endl; Out << "English Score: " << stu1.m_EngScore << endl; Out << "History Score: " << stu1.m_HistoryScore << endl; Out << "Total Score: " << stu1.m_TotalScore << endl; Out << "Average Score: " << stu1.m_AverageScore << endl; return Out; } istream & operator >> (istream &In, Student &stu1) { In >> stu1.m_SchoolNbr >> stu1.m_Name >> stu1.m_ChineseScore >> stu1.m_MathScore >> stu1.m_EngScore >> stu1.m_HistoryScore; stu1.m_TotalScore = stu1.m_ChineseScore + stu1.m_MathScore + stu1.m_EngScore + stu1.m_HistoryScore; stu1.m_AverageScore = stu1.m_TotalScore / stu1.mCourseNbr; return In; } bool comp (const Student &stu1, const Student &stu2) { if (stu1.m_TotalScore < stu2.m_TotalScore) return 1; else return 0; } Student & Student::operator = (const Student &stu) { if (this == &stu) return *this; else { m_SchoolNbr = stu.m_SchoolNbr; m_Name = stu.m_Name; m_ChineseScore = stu.m_ChineseScore; m_MathScore = stu.m_MathScore; m_EngScore = stu.m_EngScore; m_HistoryScore = stu.m_HistoryScore; m_TotalScore = stu.m_TotalScore; m_AverageScore = stu.m_AverageScore; return *this; } } int main() { vector< class Student> MyVec; while (1) { Student stu2; cout << "Please input: school nbr,name, chinese score, math score, english score, history score" << endl; cin >> stu2; MyVec.push_back(stu2); string strKey(""); cout << "if end, please input end" << endl; cin >> strKey; if (strKey == "end") break; } sort(MyVec.begin(), MyVec.end(), comp); vector<class Student>::const_iterator Iter = MyVec.begin(); while (Iter != MyVec.end()) { cout << *Iter++; cout << "--" << endl; } return 0; }
解决方案
40
加了头文件吗?algorithm
20
经过本人的测试,能正常排序
由于编译不过,修改了这些
1加头文件
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
2
int Student::mCourseNbr = 4; 这语句从.h文件移到.cpp文件中
输入的数据顺序是 nbr1 nbr2 nbr3
由于编译不过,修改了这些
1加头文件
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
2
int Student::mCourseNbr = 4; 这语句从.h文件移到.cpp文件中
输入的数据顺序是 nbr1 nbr2 nbr3