读书人

sort有关问题

发布时间: 2012-03-27 13:44:24 作者: rapoo

sort问题

C/C++ code
#include<iostream>#include<fstream>#include<vector>#include<string>#include<algorithm>using namespace std;class Book{public:    Book():ISBN("\0"),name("\0"),price(0.0){};    void modify();    void show();    string ISBN;    string name;    float price;};void Book::modify(){    cin>>ISBN>>name>>price;}void Book::show(){    cout<<ISBN<<'\n'<<name<<'\n'<<price<<endl;}vector<Book>B;int Load(){    ifstream in;    int i=0;    in.open("bookdatabase.txt");    if (!in)    {    cerr <<"error: unable to open file"<< endl;    exit(0);    }    while(!in.eof())    {        Book temp;        in>>temp.ISBN>>temp.name>>temp.price;        B.push_back(temp);        i++;    }    return i;}void Display(){    for(vector<Book>::iterator i=B.begin();i!=B.end();++i)    {        i->show();    }}void Add(){    ofstream out("bookdatabase.txt",ofstream::app);    Book temp;    cin>>temp.ISBN>>temp.name>>temp.price;    B.push_back(temp);    out<<"\n"<<temp.ISBN<<"\n"<<temp.name<<"\n"<<temp.price;}void Sort(){    sort(B.begin(),B.end());}int main(){    Load();    //Sort();    //Add();    Display();    return 0;}

我自个debug过了,就是sort出错了,求问高手们,到底哪里错了,我都调了6个小时了。。。。。

[解决办法]
为Book重载一个operator <或者提供一个全局的比较函数bool comp(const Book&lhf,const Book&rhs);
[解决办法]
sort(B.begin(),B.end());
需要3个参数,如果你用2个参数的sort()函数,那么他们以什么为标准来进行比较呢?比如是按isbn还是按价格来比较呢
[解决办法]
void Sort()
{
sort(B.begin(),B.end());
}
在这个函数上面加个比较函数就可以了,加上下面这个函数就可以了:
bool ismin (const Book &a,const Book &b)
{
return a.ISBN <= b.ISBN;
}
然后在Sort()函数的调用中,修改一个sort(),使用带3个参数的sort()函数,修改如下:
void Sort()
{
sort(B.begin(),B.end(),ismin);
}
另外读取完文件或写入文件后,要进行关闭文件,否则进行下次读取的时候,可能不是你想要的数据

读书人网 >C++

热点推荐