对类的私有元素进行排序

时间:2012-05-01 13:10:21

标签: c++ sorting

  

可能重复:
  how to sort an integer that is declared in the private

我在如何对类中的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;
 };

1 个答案:

答案 0 :(得分:0)

常用技术是为可比较的类提供比较运算符&lt;,&gt;,&lt; =,&gt; =,==和!=。大多数排序算法要求容器中的项目“低于可比性”。

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

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

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