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);
}
另外读取完文件或写入文件后,要进行关闭文件,否则进行下次读取的时候,可能不是你想要的数据