Цитата(volvo @ 20.12.2010 14:54)
Переопредели оператор "<" для своей структуры как тебе нужно, будет сортировать хоть по длине фамилии
я не знаю, правильно или нет, но что-то тут не то)
#include <iostream> #include <windows.h> #include <iomanip> #include <fstream.h> #include <ostream.h> #include <string> #include <algorithm> #include <vector> using namespace std; bool compare(const string &a, const string &b) { return a.length()<b.length(); } struct theatre { string spekt; string avtor; string rezhiser; string data; string time; bool operator<(theatre ob2) { return (spekt < ob2.spekt); } }; void print(theatre mas[20],int nomer) { int j=1; for (int i = 0; i < nomer; i++) { cout<<"\n"<<j<<")"; cout<<" Nazvanie: "<<mas[i].spekt<<endl<<" Avtor: "<<mas[i].avtor<< endl<<" Rezhiser: "<<mas[i].rezhiser<<endl<<" Data: "<<mas[i].data<<endl<< " Vremya: "<<mas[i].time<<endl; j++; } } void change(theatre mas[20],int element) { cout<<"Nazvanie: ", cin.ignore(), getline(cin,mas[element-1].spekt); cout<<"Avtor: ", cin.ignore(), getline(cin,mas[element-1].avtor); cout<<"Rezhiser: ", cin.ignore(), getline(cin,mas[element-1].rezhiser); cout<<"Data: ", cin.ignore(), getline(cin,mas[element-1].data); cout<<"Vremya: ", cin.ignore(), getline(cin,mas[element-1].time); } int del(theatre mas[20],int element,int nomer) { int j=0; mas[element-1].spekt="del"; for (int i = 0; i < nomer; i++) if (mas[i].spekt != "del") { mas[j].spekt = mas[i].spekt; mas[j].avtor = mas[i].avtor; mas[j].rezhiser = mas[i].rezhiser; mas[j].data = mas[i].data; mas[j].time = mas[i].time; j++; } cout<<"Zapis' udalena!\n"; return nomer=nomer-1; } void save(theatre mas[20], int nomer) { ofstream f("baza.txt"); for (int i = 0; i < nomer; i++) if (i!= nomer-1) { f<<mas[i].spekt; f<<endl; f<<mas[i].avtor; f<<endl; f<<mas[i].rezhiser; f<<endl; f<<mas[i].data; f<<endl; f<<mas[i].time; f<<endl; } else { f<<mas[i].spekt; f<<endl; f<<mas[i].avtor; f<<endl; f<<mas[i].rezhiser; f<<endl; f<<mas[i].data; f<<endl; f<<mas[i].time; f<<endl; } f.close(); cout<<"Dannye sohraneny v file 'baza.txt'.\n"; } int main() { theatre mas[20]; int b,element,nomer=0; string c; vector<theatre>teatr; cout<<"Chtenie dannyh iz faila 'baza.txt'...\n"; ifstream f("baza.txt"); while (!f.eof()) { f>>mas[nomer].spekt; f>>mas[nomer].avtor; f>>mas[nomer].rezhiser; f>>mas[nomer].data; f>>mas[nomer].time; teatr.push_back(*mas); nomer++; } f.close(); while (true) { cout<<"\nVyberite odno iz deistvii:\n"; cout<<"1) Izmenit' zapis'.\n2) Udalit' zapis'.\n3) Prosmotret' dannye.\n"; cout<<"4) Sohranit' dannye.\n5) Informaciya o spektaklyah, postavlennyh"; cout<<" dannym rezhiserom.\n6) Exit.\n"; cin>>b; switch(b) { case 1: { cout<<"Vvedite nomer izmenyaemoi zapisi: "; cin>>element; change(mas,element); break; } case 2: { cout<<"Vvedite nomer udalyaemoi zapisi: "; cin>>element; nomer=del(mas,element,nomer); break; } case 3: { print(mas,nomer); break; } case 4: { save(mas,nomer); break; } case 5: { cout<<"Vvedite familiyu rezhisera: ", cin.ignore(), getline(cin, c); int j=1; for (int i=0; i < nomer; i++) if (c == mas[i].spekt) { sort(teatr.begin(), teatr.end()); cout<<"\n"<<j<<")"; cout<<" Nazvanie: "<<mas[i].spekt<<endl<<" Avtor: "<<mas[i].avtor<< endl<<" Rezhiser: "<<mas[i].rezhiser<<endl<<" Data: "<<mas[i].data<<endl<< " Vremya: "<<mas[i].time<<endl; j++; } else cout<<"Takogo rezhisera net!\n"; } case 6: return 0; default: cout<<"Nevernye dannye!\n"; } } system("pause"); return 0; }
файл для сортировки суточку изменил, и может я что-то не правильно понял с переопределением?
baza.txt ( 101 байт )
Кол-во скачиваний: 519