Почему-то не работает функция сортировки, подскажите в чем проблема (MSV C++)
Код:
#include <iostream>
#include <vector>
#include <conio.h>
#include <string>
#include <algorithm>
#include <conio.h>
#include <windows.h>
#include <process.h>
using namespace std;
void cls(){
HANDLE hConsole;
CONSOLE_SCREEN_BUFFER_INFO csInfo;
DWORD dummy;
COORD Home={0,0};
hConsole=GetStdHandle(STD_OUTPUT_HANDLE);
GetConsoleScreenBufferInfo(hConsole, &csInfo);
FillConsoleOutputCharacter(hConsole,' ',csInfo.dwSize.X*csInfo.dwSize.Y,Home,&dummy);
SetConsoleCursorPosition(hConsole,Home);
};
class base{
protected:
string name;
public:
void set_name(string n){
this -> name=n;
}
string get_name(){
return this->name;
}
virtual void print()=0{
cout << "Error, Virtual print - " << name;
}
};
class country: public base{
protected:
float square;
float mens;
float shamp;
public:
void print(){
cout << name << " "<< square << " " << mens << " " << shamp << endl;
}
void set_square(float f){
this->square=f;
}
float get_square(){
return this->square;
}
void set_mens(float f){
this->mens=f;
}
float get_mens(){
return this->mens;
}
void set_shamp(float f){
this->shamp=f;
}
float get_shamp(){
return this->shamp;
}
};
class city:public country{
float oc;
public:
void print(){
cout << name << " "<< square << " " << mens << " " << shamp << " " << oc << endl;
}
void set_oc(float f){
this->oc=f;
}
float get_oc(){
return this->oc;
}
};
/////FUNCTIONAL OBJECTS///////////
class compareCity{
public:
bool operator()(city a1, city a2){
return a1.get_name()>a2.get_name();
}
};
class menu{
string sTemp;
float fTemp;
country* cTemp;
city* tTemp;
vector<country> countrys;
vector<city> citys;
public:
void use(){
int c;
while(1){
cout << "\n F1 F2 F3 F4 F5 F6 F7 F10\n";
cout << " add del cler sort vse cou cit exit\n";
c=getch();
cls();
switch (c){
case 59: add(); break;
case 60: del(); break;
case 61: clr(); break;
case 62: sort(); break;
case 63: print('a'); break;
case 64: print(); break;
case 65: print(1); break;
case 68: exit(0); break;
default: break;
}
}
}
void add(){
char c;
cout << "Type 1 - towers, 2 - country, Anykey - cancel\n";
cin >> c;
switch (c){
case '1':
cout << "NEW TOWER\n";
tTemp = new city;
cout << "name?";
cin >> sTemp;
(*tTemp).set_name(sTemp);
cout << "SQUARE?\n";
cin >> fTemp;
(*tTemp).set_square(fTemp);
cout <<"MENS?";
cin >> fTemp;
(*tTemp).set_mens(fTemp);
cout <<"SHAMP?";
cin >> fTemp;
(*tTemp).set_shamp(fTemp);
cout << "OC?\n";
cin >> fTemp;
(*tTemp).set_oc(fTemp);
citys.push_back(*tTemp);
cls();
break;
case '2':
cls();
break;
default: cout << "nevern command\n"; break;
}
}
void print(int a){
cout << "NAME SQUARE MENS,% SHAMP% OC%\n";
for (int i=0; i<citys.size(); i++)
citys[i].print();
}
void print(){
cout << "NAME SQUARE MENS,% SHAMP% \n";
for (int i=0; i<countrys.size(); i++)
countrys[i].print();
}
void print(char a){
cout << "NAME SQUARE MENS,% SHAMP% OC%\n";
for (int i=0; i<citys.size(); i++)
citys[i].print();
cout << "---------------\n";
cout << "NAME SQUARE MENS,% SHAMP% \n";
for (i=0; i<countrys.size(); i++)
countrys[i].print();
}
void del(){
print('a');
cout << " WHAT DEL TOWER - 1, COUNTRY - 2";
char c;
int i;
cin >> c;
cout << "number element";
cin >> i;
i--;
switch (c){
case '1':
if ((citys.size()<i) || (i<0)){
cout << " ERROr, NO ELEMENT HERE";
getch();
}
else
citys.erase(citys.begin() +i);
break;
case 2:
if ((countrys.size()<i) || (i<0)){
cout << " ERROr, NO ELEMENT HERE";
getch();
}
else
countrys.erase(citys.begin()+i);
break;
}
}
void clr(){
cout << " WHAT ERASE? 1- tower 2-country anykey - cancel\n";
char c;
cin >> c;
switch(c){
case '1':
while(!citys.empty()){
citys.pop_back();
}
break;
case '2':
while(!countrys.empty()){
countrys.pop_back();
}
break;
}
}
void sort(){
print(1);
cout << "BY NAME";
getch();
sort(citys.begin(), citys.end(), compareCity());
print(1);
getch();
}
};
////////////////
int main(){
menu MyMenu;
MyMenu.use();
return 0;
}