-2

可能重复:
如何对私有中声明的整数进行排序

我在如何对类中的 int id 元素进行排序时遇到问题,这是我为类放置函数的地方

#include <iostream>
#include <fstream>
#include <string>
using namespace std;

#include "student.h"
#define cap 100

//Student constructor- empty

student::student()
{
   id = 0;
   first = "null";
   last = "null";
   age = 0;
   gpa = 0.0;
}

//Student deconstructor

student::~student()
{

}

bool student::get(istream &in)
{

   in >> id >> first >> last >> age >> gpa;
   return(in.good());
}
void student::put(ostream &out)
{
   out << id << first << last << age << gpa;
}
bool student::operator>(student)
{
    if(student[i].id>student[i+1].id)
        return true;
    else
        return false;
    cout << student[i].id;
}

bool student::operator<(student)
{
    if(student[i].id<student[i+1].id)
        return true;
    else
        return false;
}
void student::sort_array()
{

    int j,temp;
    for(j=0;j<cap-1;j++)
    { 
//if out of position switch the out of align number
    if(student[i].id<student[i+1].id)
        {
            temp =  student[i].id;
            student[i].id = student[i+1].id;
            student[i+1].id = temp;
        }
    }
}

这是我的文件,以及显示和调用函数的主要代码

#include <iostream>
#include <fstream>
#include <string>
#include <iomanip>
using namespace std;

#include "student.h"
#define cap 100
void main()
{       string s;
    class student student[cap],l;
    int i;
    fstream f;

    i=0;
    cout << "Enter the file name: ";    //Display to enter the file name
    cin >>s;


    f.open(s.data(),ios::in);
    if(!f.is_open()) 
        cout << "could not open file";
    while(i<cap && !f.eof())
    {   
        student[i].get(f);

 //Display if okay
        if(f.good())
        {
            student[i].sort_array();
            i++;
            cout << i;
        }
    }
    f.close();
}

这是我的课程代码和课程文件

#include <iostream>
using namespace std;

class student
{
    public:
        student(); //Constructor without parameters
        student(int,string,string,int,float); //Constructor with parameters
        ~student(); //Deconstructors
        bool get(istream &);    //Input
        void put(ostream &);    //Output
        bool operator==(student);
        bool operator>(student);
        bool operator<(student);
        bool operator==(int);
        bool operator>(int);
        bool operator<(int);    
        int read_array(string,int);
        void sort_array();
    private:
        int id,age;
        float gpa;
        string last,first;
 };
4

1 回答 1

0

常见的技术是为可以比较的类提供比较运算符 <、>、<=、>=、== 和 !=。大多数排序算法要求容器中的项目可以“小于可比”。

查找 Boost 库,因为它具有在仅定义小于和相等时定义所有比较运算符的工具。

在您的设计中,您将需要一个容器来存放您student的 s. std::sort在容器上使用或您喜欢的分类功能。如果这是家庭作业,您可能希望将容器main()与排序逻辑一起放入。

此外,要么在网上搜索“C++ 重载运算符”,要么定义自己的方法。如果你很聪明,你可以将你的类设计为具有不同的比较函数,以允许按不同的字段进行排序。

于 2012-05-01T13:29:02.833 回答